Mailinglisten-Archive |
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