Möchten Sie die Spaltennamen in ein Tischoder die Spaltennamen im Datensatz aus einer Abfrage? Dies sind zwei verschiedene Dinge, die auf zwei verschiedene Arten ausgeführt werden. Phils Antwort erfüllt ersteres, JapanPros Antwort erfüllt letzteres!
– Karl
25. März 2011 um 3:37 Uhr
@charles: Ich glaube, ich möchte nur die Spaltennamen in einer Tabelle abrufen. Ich verstehe nicht ganz was du meinst Spaltennamen im Datensatz aus einer Abfrage. aber siehe meine Antwort in meiner Bearbeitung oben. Danke.
– Laufen
25. März 2011 um 4:09 Uhr
@lauthiamkok: Das machst du in deinem aktualisierten Beitrag – du machst eine Abfrage, die eine Reihe von Datensätzen zurückgibt, und dann greifst du die Spaltennamen für diesen bestimmten Satz. Es kommt einfach vor, dass die Spaltennamen in Ihrer Ergebnismenge mit denen in Ihrer Tabelle identisch sind. Denken Sie daran, dass SQL-Spalten Aliasnamen haben können.
– Karl
25. März 2011 um 4:13 Uhr
@lauthiamkok, wenn Sie versucht haben, die Spaltennamen aus einer Tabelle abzurufen, ist die Antwort von @JapanPro unten der beste Weg, dies zu tun – mit der information_schema Methode. Was machst du macht den Job ist aber nicht der “richtige” Weg.
– Karl
25. März 2011 um 4:26 Uhr
Wenn Sie eine leere Tabelle haben, schlägt Ihre Methode fehl, da es keine Datensätze gibt, aus denen Sie die Spalten abrufen können.
warum nicht $q = $dbh->query("DESCRIBE tablename"); $table_fields = $q->fetchAll(PDO::FETCH_COLUMN);?
– Francisco Presencia
10. Januar 2013 um 17:34 Uhr
Leser, eine generische Lösung finden Sie unter @Will answer.
– Peter Krauß
3. Juli 2013 um 11:22 Uhr
IMHO, obwohl diese Antwort für viele nützlich sein kann, entspricht sie nicht der in der Frage ausgedrückten Notwendigkeit, dh “Gibt es eine Möglichkeit, den Spaltennamen aus dem Rowset-Array abzurufen, während ich Daten iteriere?” Der Benutzer möchte den Schlüssel im Array sehen, während er Werte iteriert. Die Funktion key($array) kann helfen.
– ManuelJE
13. Dezember 2018 um 15:08 Uhr
Wille
Dies funktioniert für MySQL, Postgres und wahrscheinlich jeden anderen PDO-Treiber, der die verwendet LIMIT Klausel.
Notiz LIMIT 0 wird für verbesserte Leistung hinzugefügt:
Danke Will! Hallo Leser, das ist die generische PDO-Lösung! Die Lauer-Lösung, die nur von MySQL — und PDOStatement::getColumnMeta() unterstützt wird, ist komplex, wird nicht von allen PDO-Treibern unterstützt und wird als experimentell aufgeführt. PS: die Abfrage läuft auch mit leeren Tabellen.
– Peter Krauß
3. Juli 2013 um 11:14 Uhr
Vereinfachen Sie vielleicht mit etwas wie $columns = array_keys($rs->fetchAll(PDO::FETCH_ASSOC));… Ich versuche es nicht.
– Peter Krauß
3. Juli 2013 um 11:33 Uhr
@PeterKrauss, ja, es braucht mindestens ein Ergebnis.
– David d C e Freitas
22. April 2014 um 3:42 Uhr
@DaviddCeFreitas, entschuldige die Methode getColumnMeta eine 6+ Jahre alte “ist EXPERIMENTAL”-Warnung haben … Die einzige Möglichkeit besteht darin, eine nicht leere Tabelle zu verwenden. Sie können so etwas wie verwenden SELECT * FROM my_table WHERE id=0 und füllen Sie alle Tabellen mit einer Zeile ohne Daten.
– Peter Krauß
22. April 2014 um 8:45 Uhr
LIMIT 0 ist eine MySQL/PGSQL-spezifische Syntax. Wie ist das generisch? Wie macht man das?
Möchten Sie die Spaltennamen in ein Tischoder die Spaltennamen im Datensatz aus einer Abfrage? Dies sind zwei verschiedene Dinge, die auf zwei verschiedene Arten ausgeführt werden. Phils Antwort erfüllt ersteres, JapanPros Antwort erfüllt letzteres!
– Karl
25. März 2011 um 3:37 Uhr
@charles: Ich glaube, ich möchte nur die Spaltennamen in einer Tabelle abrufen. Ich verstehe nicht ganz was du meinst Spaltennamen im Datensatz aus einer Abfrage. aber siehe meine Antwort in meiner Bearbeitung oben. Danke.
– Laufen
25. März 2011 um 4:09 Uhr
@lauthiamkok: Das machst du in deinem aktualisierten Beitrag – du machst eine Abfrage, die eine Reihe von Datensätzen zurückgibt, und dann greifst du die Spaltennamen für diesen bestimmten Satz. Es kommt einfach vor, dass die Spaltennamen in Ihrer Ergebnismenge mit denen in Ihrer Tabelle identisch sind. Denken Sie daran, dass SQL-Spalten Aliasnamen haben können.
– Karl
25. März 2011 um 4:13 Uhr
@lauthiamkok, wenn Sie versucht haben, die Spaltennamen aus einer Tabelle abzurufen, ist die Antwort von @JapanPro unten der beste Weg, dies zu tun – mit der
information_schema
Methode. Was machst du macht den Job ist aber nicht der “richtige” Weg.– Karl
25. März 2011 um 4:26 Uhr
Wenn Sie eine leere Tabelle haben, schlägt Ihre Methode fehl, da es keine Datensätze gibt, aus denen Sie die Spalten abrufen können.
– Funke
15. Dezember 2011 um 21:32 Uhr