Pdostatement :: columnCount () ist eine Methode im PDOSTATEMENT -Objekt, das ganzzahlige Werte zurückgibt, die sich auf die Anzahl der Spalten im Ergebnissatz beziehen. Der Prototyp ist wie folgt:
public PDOStatement::columnCount(): int
Nachdem Sie eine SQL -Abfrage ausgeführt haben (insbesondere die Auswahlanweisung ), können Sie diese Methode aufrufen, um zu erhalten, wie viele Spalten im Ergebnissatz enthalten sind.
Schauen wir uns das einfachste Beispiel an:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$stmt = $pdo->query('SELECT id, name, email FROM users');
$columnCount = $stmt->columnCount();
echo "Die Anzahl der Spalten ist: " . $columnCount;
?>
Nachdem der obige Code ausgeführt wurde, wird die Ausgabe sein:
Die Anzahl der Spalten ist: 3
Dies zeigt, dass die Abfrageergebnisse drei Felder enthalten: ID , Name und E -Mail .
Ein häufiges Missverständnis ist es , ColumnCount () zu rufen, nachdem die Abfrage nicht ausgeführt wurde oder eine nicht-result-Set-Abfrage (z. B. einfügen , aktualisieren , löschen ). Das ist falsch:
<?php
$stmt = $pdo->prepare('SELECT id, name FROM users WHERE id = :id');
// Nicht ausgeführt -> columnCount Möglich zurückkehren 0 oder ein falscher Wert
echo $stmt->columnCount(); // Normalerweise 0
?>
Um sicherzustellen, dass der Rückgabewert korrekt ist, sollten Sie immer nach der Ausführung der Abfrage anrufen und der Ergebnissatz erhalten wird:
$stmt->execute([':id' => 1]);
echo $stmt->columnCount(); // Geben Sie die Anzahl der Spalten korrekt zurück
Angenommen, Sie erstellen ein gemeinsames Datenbanktabellenbrowser -Tool und müssen die Title -Zeile der HTML -Tabelle basierend auf den Abfrageergebnissen dynamisch generieren. Sie können ColumnCount () und getColumnmeta () verwenden, um es zu vervollständigen:
<?php
$stmt = $pdo->query('SELECT * FROM users');
$colCount = $stmt->columnCount();
echo "<table border='1'><tr>";
for ($i = 0; $i < $colCount; $i++) {
$meta = $stmt->getColumnMeta($i);
echo "<th>" . htmlspecialchars($meta['name']) . "</th>";
}
echo "</tr>";
?>
Dies generiert automatisch einen Header, der dem Abfrageergebnis entspricht.
Viele Anfänger werden RowCount () und ColumnCount () verwechseln. Der Unterschied zwischen den beiden ist wie folgt:
ColumnCount () : Nehmen Sie die Anzahl der Spalten im Abfrageergebnis ab.
RowCount () : Erhält die Anzahl der betroffenen Zeilen, ist jedoch in ausgewählten Abfragen nicht immer zuverlässig.
Um die Anzahl der Zeilen zu erhalten, die durch eine Auswahlabfrage zurückgegeben werden, sollten Sie Fetchall () oder Traversal -Ergebnismengenzahlen verwenden.
Das Verhalten von ColumnCount () ist im Grunde genommen über Datenbanken konsistent, einige Treiber (wie ältere Versionen von SQLite oder einigen ODBC -Treibern) können jedoch vor der Ausführung 0 zurückgeben. Um genaue Werte zu erhalten, sollten die folgenden Regeln befolgt werden:
Stellen Sie sicher, dass Sie () oder query () ausgeführt werden, wird ausgeführt.
Verwenden Sie metadata-fähige Treiber;
Nennen Sie diese Methode nicht in einer ergebnislosen Anweisung.
Wenn Sie eine REST -API entwickeln und die Feldinformationen jedes Datensatzes zurückgeben möchten, können Sie ColumnCount () verwenden, um eine Feldliste automatisch zu generieren, z. B.:
<?php
$stmt = $pdo->query('SELECT * FROM users');
$columns = [];
for ($i = 0; $i < $stmt->columnCount(); $i++) {
$meta = $stmt->getColumnMeta($i);
$columns[] = $meta['name'];
}
header('Content-Type: application/json');
echo json_encode([
'columns' => $columns,
'data' => $stmt->fetchAll(PDO::FETCH_ASSOC)
]);
?>
Dies ist besonders bequem, wenn Sie Schnittstellen wie https://gitbox.net/api/v1/table/users erstellen.