<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Dieser Teil hat nichts mit dem Inhalt des Artikels zu tun</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"PHPArtikelgenerierung beginnt...\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
existieren PHP Mitte,`</span><span><span class="hljs-title class_">PDOStatement</span></span><span>::</span><span><span class="hljs-variable constant_">getColumnMeta</span></span><span>` 是用于获取查询结果Mitte某一列元数据的函数。Der Hauptzweck beinhaltet das Erhalten von Spaltennamen、Datentyp、Länge und andere Informationen。Über Ihre Frage:“`</span><span><span class="hljs-title class_">PDOStatement</span></span><span>::</span><span><span class="hljs-variable constant_">getColumnMeta</span></span><span>` 是否必须existieren查询执行之后调用”,Die Antwort ist**必须existieren查询执行之后调用**,Die Gründe sind wie folgt。
Erste,`</span><span><span class="hljs-title class_">PDOStatement</span></span><span>::</span><span><span class="hljs-variable constant_">getColumnMeta</span></span><span>` Verweilen Sie sich auf die Abfrageergebnis -Set -Struktur。Das heißt,Es muss die von der Abfrage zurückgegebenen Datenspalteninformationen kennen,而这些信息只有existieren SQL Die Abfrage kann erst ermittelt werden, nachdem sie von der Datenbank ausgeführt wurde。existieren调用 `</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>()` Vor der Methode,PDO Das Objekt fordert keine Ausführung aus der Datenbank an SQL,Daher kann die tatsächliche Metadaten einer Spalte nicht erhalten werden。
Zum Beispiel,Betrachten Sie den folgenden Code:
```php
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
</span><span><span class="hljs-comment">// Fehlerdemonstration:existieren execute Vorher angerufen getColumnMeta</span></span><span>
</span><span><span class="hljs-variable">$meta</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getColumnMeta</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// Möglich zurückkehren false Oder eine Warnung werfen</span></span><span>
</span></span>Zu diesem Zeitpunkt kennt die PDO die Informationen der Spalte in der Benutzertabelle nicht, da die Abfrage nicht an die Datenbank gesendet wurde, sodass GetColumnmeta false zurückgibt oder eine Warnung generiert.
Der richtige Weg ist, zuerst die Abfrage auszuführen:
<span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>(); </span><span><span class="hljs-comment">// Eine Frage ausführen</span></span><span>
</span><span><span class="hljs-comment">// Holen Sie sich Metadaten nach der Abfrageausführung</span></span><span>
</span><span><span class="hljs-variable">$metaId</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getColumnMeta</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>);
</span><span><span class="hljs-variable">$metaName</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getColumnMeta</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$metaId</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$metaName</span></span><span>);
</span></span>Hier sendet die methode execute () die SQL -Abfrage an die Datenbank und generiert die Ergebnismenge. Anschließend kann GetColumnmeta die Metadateninformationen der Spalte erfolgreich zurückgeben.
Zusammenfassung der Gründe:
Abhängigkeitsergebnissatz : GetColumnmeta muss Spalteninformationen kennen, und diese Informationen stammen aus dem ausgeführten Ergebnissatz.
Einschränkungen des Datenbanktreibers : Verschiedene Datenbanktreiber können während der Abfragevorbereitungsphase die Spalteninformationen möglicherweise nicht vollständig analysieren, und genaue Metadaten können erst nach der Ausführung bereitgestellt werden.
Vermeiden Sie undefiniertes Verhalten : Wenn Sie vor der Ausführung gerufen werden, können falsche oder unvollständige Informationen zurückgegeben werden, was die Programunsicherheit erhöht.
Daher muss die Verwendung von pdostatement :: getColumnmeta sofort von execute () oder nach dem Aufrufen einer Query () -Methode wie dieser gefolgt werden, um eine direkte Abfrage auszuführen . Dies ist eine Konstruktionsbeschränkung für PHP und PDO und auch eine notwendige Bedingung, um die Genauigkeit der Säulenmetadaten zu gewährleisten.
<hr> <? php // Dieser Teil hat nichts mit dem Inhalt des Artikels echo "Artikelgenerierung endet. \ n"; ?> <span></span>
Verwandte Tags:
PDOStatement