phpbar.de logo

Mailinglisten-Archive

[php] In Query-Ergebnis keine korrekten Feldnamen?

[php] In Query-Ergebnis keine korrekten Feldnamen?

Egon Schmid eschmid_(at)_s.netic.de
Wed, 25 Aug 1999 09:19:30 +0200


Oliver Kummerow wrote:
> 
> Hallo,
> 
> $row = mysql_fetch_array ( $link_ident );
> 
> liefert per $row ["fieldname"] die Feldinhalte zurück.
> 
> Leider funktioniert dies bei Querys, in denen gleichlautende Feldnamen
> auftreten, nicht.

Dann hast Du einen Fehler im Datenbankdesign gemacht.

> Normalerweise sollte in solchen Fällen ein Bezeichner wie $row
> ["tablename.fieldname"] funktionieren. Darauf erhalte ich aber von PHP
> keinen Rückgabewert.
> 
> Beispiel: SELECT *
>           FROM atabelle a, btabelle b
>           WHERE a.id = b.id
> 
> Das Feld id ist danach nicht eindeutig identifizierbar. PHP liefert mit
> $row ["id"] den Wert des letzten Feldes mit dem diesem Namen zurück -
> klar, wenn in dem assoziativen Array $row "id" der gleichlautende $key
> ist, wird mit dem letzten $value überschrieben. Mit mysql_fetch_object
> passiert genau das Gleiche.

Auch hier stimmt Deine Aussage nicht.
 
> Es ginge nur, wenn ich in der Query jedes Feld einzeln aufführen und
> jedem zweideutigen einen Alias verpassen würde, also
> Beispiel: SELECT a.id as aid, b.id as bid
>                 [,..sämtliche weiteren Felder einzeln benennen..]
>           FROM atabelle a, btabelle b
>           WHERE a.id = b.id

Ja das müßte gehen, wenn die Datenbank etwas verhunzt angelegt worden
ist.
 
> Das ist häßlich, weil man bei zusätzlichen Feldern in den Tabellen
> ständig die Querys anpassen muß. Und für ein SQL-Frontend absolut
> unüblich. Also anders gesagt, das wäre, wenn ich mich nicht täusche
> (fürchte nein) ein dicker Fehler in PHP.

Nein das ist kein Fehler von PHP. Es ist auch kein Fehler von MySQL. Der
Datenbankdesigner hat einen Fehler gemacht.
 
> Habe ich was übersehen, oder welche Lösung ist noch denkbar?
> 
> Hier der Prüf-Code:
> echo "row [\"id\"]==" . $row ["id"];
> // Es kommt: Eine der beiden ids. Ist aber schlichtweg falsch, denn id
> ist zweideutig !!!
> echo "row [\"a.id\"]==" . $row ["a.id"];
> // Richtige Abfrage - es kommt nichts
> echo "row [\"b.id\"]==" . $row ["b.id"];
> // Richtige Abfrage - es kommt nichts

??

-Egon


php::bar PHP Wiki   -   Listenarchive