[PHP] Tables van rows uit MySQL-resultaat achterhalen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Ik zou graag van het resultaat van mijn MySQL Query de tables bij de veldnamen hebben. Via de normale php_mysql extensie lukte het me sowieso niet, dus ik ben nu overgestapt op het gebruiken van PDO. Op zich lukt dit, maar ik krijg geen beschikking over de tablenaam bij de velden.

Volgens de documentatie van PDO zou dit moeten kunnen d.m.v.
class PDOStatement implements Traversable {
array getColumnMeta ( int $column )
}
Met de daarbij behorende array-reference:
native_type The PHP native type used to represent the column value.
driver:decl_type The SQL type used to represent the column value in the database. If the column in the result set is the result of a function, this value is not returned by PDOStatement::getColumnMeta().
flags Any flags set for this column.
name The name of this column as returned by the database.
table The name of this column's table as returned by the database.
len The length of this column. Normally -1 for types other than floating point decimals.
precision The numeric precision of this column. Normally 0 for types other than floating point decimals.
pdo_type The type of this column as represented by the PDO::PARAM_* constants.
Helaas blijkt de functie wel te werken, maar de 'table' record niet beschikbaar te zijn.

Nu ben ik op zoek naar andere efficiente oplossing om dit te bewerkstelligen, of een fix voor bovenstaande te creeeren. Ik heb gedacht over dingen als 'describe', maar blijf dan tegen problemen aanlopen. Bijvoorbeeld column-namen die in meerdere tabellen voorkomen, niet te kunnen achterhalen vanuit het mysqlresult etc.

Alle ideeën zijn welkom! _/-\o_

Acties:
  • 0 Henk 'm!

  • H004
  • Registratie: Maart 2006
  • Laatst online: 28-05 19:55
Lukt dat niet met mysql_fetch_field of mysql_field_table?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php 
$result = mysql_query('SELECT * FROM table');

// mysql-fetch-field
$i = 0;
while ($i < mysql_num_fields($result)) {
    $meta = mysql_fetch_field($result, $i);
    $column_name = $meta->name;
    $table_name = $meta->table;
    $i++;
}

// mysql-field-table en mysql_field_name
$i = 0;
while ($i < mysql_num_fields($result)) {   
    $column_name = mysql_field_name($result, $i);
    $table_name = mysql_field_table($result, $i);
    $i++;
}
?>

[ Voor 99% gewijzigd door H004 op 10-06-2008 20:22 ]


Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
mysql-fetch-table()
Dat zou me inderdaad uit de problemen helpen! Heb alleen net alles uitgeschreven in PDO, kost me weer twee dagen om het allemaal terug te zetten, dat is jammer. Maar wel fijn om te weten dat er in ieder geval een normale oplossing is! Zou dit ook te realiseren zijn binnen de PDO-extensie? :X

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
PDOStatement->getColumnMeta()
(PHP 5 >= 5.1.0)

CHANGELOG
Version Description
5.2.3 table field
Zou het kunnen zijn dat ik nog een te oude versie heb en daarom geen 'table' uit kan lezen?

Phpinfo() geeft me alleen pdo_mysql:
PDO Driver for MySQL, client library version 5.0.22
Bij PDO zelf staat geen versienummer. :( Deze hierboven gaat niet over mijn PHP versie zelf btw.

[ Voor 11% gewijzigd door r0bert op 10-06-2008 21:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik zal wel iets niet goed snappen (en heb 0 ervaring met PDO, weet niet eens wat 't is), maar waarom wil je in godsnaam per veld weten uit welke tabel 'ie komt?
Je hebt zelf de query geschreven, en daarmee aangegeven uit welke tabel 'ie welk veld moet plukken. Dan heb je die info toch al op voorhand en hoeft dat niet nog 's terug te komen in je resultset???

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
De query heb ik niet zelf geschreven, dat is ook zo'n beetje direct de reden waarom ik het wil ;)

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Inmiddels is het probleem opgelost. De 'table'-index is inderdaad pas in de aangegeven versie toegevoegd. Een detail, maar het staat er wel.

Ik heb het het opgelost door alles te upgraden (m.b.v. remi-repos) en draai nu
php-pdo.i386 5.2.6-1.el5.remi installed
Waarbij het allemaal prima werkt.
Array ( [native_type] => LONG [flags] => Array ( [0] => not_null [1] => primary_key ) [table] => objects [name] => objectid [len] => 11 [precision] => 0 [pdo_type] => 2 )
* r0bert @ überhappy

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:24

Patriot

Fulltime #whatpulsert

r0bert schreef op dinsdag 10 juni 2008 @ 21:10:
[...]


Zou het kunnen zijn dat ik nog een te oude versie heb en daarom geen 'table' uit kan lezen?

Phpinfo() geeft me alleen pdo_mysql:

[...]

Bij PDO zelf staat geen versienummer. :( Deze hierboven gaat niet over mijn PHP versie zelf btw.
Dat 5.2.3 gaat over de versie van PHP zelf, dat is geen versienummer van de PDO driver voor MySQL (tenzij die toevallig hetzelfde is, maar het is bedoelt als versienummer van PHP). Is in het vervolg misschien ook handig om te weten.
Pagina: 1