info
Erfahren Sie, wie mysqli_info() in PHP die zuletzt ausgeführte Abfrage beschreibt – mit Syntax, Beispielen und Unterschieden zu ähnlichen Funktionen.
Dieser Artikel behandelt die Funktion mysqli_info() in PHP, die einen für Menschen lesbaren String zurückgibt, der beschreibt, was die zuletzt ausgeführte Abfrage bewirkt hat. Sie erfahren, was die Funktion zurückgibt, welche Anweisungen eine Ausgabe erzeugen, wie sie im prozeduralen und im objektorientierten MySQLi-Stil aufgerufen wird und wie sie sich von verwandten Funktionen wie mysqli_affected_rows() unterscheidet.
Was mysqli_info() zurückgibt
mysqli_info() ist eine eingebaute PHP-Funktion, die einen formatierten Statusstring für die zuletzt auf einer bestimmten Verbindung ausgeführte Abfrage zurückgibt. Der String entspricht dem Text, den der MySQL-Server für die Anweisung meldet – er ist für Menschen gedacht, nicht zum Parsen.
Es wird nur dann ein String erzeugt, wenn Anweisungen mehrere Zeilen ändern oder laden. Bei anderen Abfragen (einem einfachen SELECT, einem CREATE TABLE usw.) gibt die Funktion einen leeren String oder NULL zurück. Die Anweisungen, die einen String erzeugen, sind:
| Anweisung | Beispiel-Ausgabestring |
|---|---|
INSERT INTO ... SELECT ... | Records: 3 Duplicates: 0 Warnings: 0 |
INSERT INTO ... VALUES (...),(...) | Records: 2 Duplicates: 0 Warnings: 0 |
LOAD DATA INFILE ... | Records: 1 Deleted: 0 Skipped: 0 Warnings: 0 |
ALTER TABLE ... | Records: 3 Duplicates: 0 Warnings: 0 |
UPDATE ... | Rows matched: 40 Changed: 40 Warnings: 0 |
Da das Format je nach Anweisungstyp und MySQL-Version variieren kann, sollte der String nur als Anzeigewert verwendet werden. Um einzelne Zahlen programmatisch auszulesen, verwenden Sie stattdessen die dedizierten Funktionen – siehe mysqli_affected_rows() und mysqli_warning_count().
Syntax
mysqli_info() nimmt den Link entgegen, der von mysqli_connect() zurückgegeben wird:
// Procedural style
string mysqli_info(mysqli $link)
// Object-oriented style
string $mysqli->infoIn der objektorientierten API ist info eine Eigenschaft, keine Methode – es gibt keine Klammern.
Verwendung von mysqli_info()
Rufen Sie mysqli_info() auf einer gültigen MySQLi-Verbindung direkt nach dem Ausführen einer Abfrage mit mysqli_query() auf. Führen Sie die Statusabfrage durch, bevor Sie die nächste Abfrage starten, da jede Abfrage den vorherigen Status überschreibt.
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (!$mysqli) {
die("Connection failed: " . mysqli_connect_error());
}
// A multi-row INSERT produces a status string
$sql = "INSERT INTO users (name) VALUES ('Ann'), ('Bob'), ('Cara')";
if (mysqli_query($mysqli, $sql)) {
echo mysqli_info($mysqli);
} else {
echo "Query failed: " . mysqli_error($mysqli);
}
mysqli_close($mysqli);
?>Für das dreizeilige INSERT oben gibt das Skript folgendes aus:
Records: 3 Duplicates: 0 Warnings: 0Hier steht Records für die Anzahl der von der Anweisung verarbeiteten Zeilen, Duplicates zählt Zeilen, die mit einem eindeutigen Schlüssel kollidierten, und Warnings meldet nicht-fatale Probleme, die während der Ausführung aufgetreten sind.
Objektorientierter Stil
Dieselbe Logik mit der objektorientierten MySQLi-API liest die Eigenschaft info:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Connection failed: " . $mysqli->connect_error);
}
$mysqli->query("INSERT INTO users (name) VALUES ('Ann'), ('Bob'), ('Cara')");
echo $mysqli->info; // Records: 3 Duplicates: 0 Warnings: 0
$mysqli->close();
?>mysqli_info() vs. mysqli_affected_rows()
Diese werden leicht verwechselt:
mysqli_info()gibt einen formatierten String zur Anzeige zurück und funktioniert nur für die oben aufgeführten Anweisungstypen.- mysqli_affected_rows() gibt eine ganzzahlige Anzahl der durch
INSERT,UPDATE,DELETEoderREPLACEgeänderten Zeilen zurück – verwenden Sie diese Funktion, wenn Sie eine Zahl in Ihrem Code benötigen.
Wenn Sie die Anzahl benötigen, parsen Sie niemals den mysqli_info()-String; rufen Sie stattdessen direkt mysqli_affected_rows() auf.
Häufige Fallstricke
- Ein einfaches
SELECTgibt nichts zurück.mysqli_info()ist beiSELECTleer; um zurückgegebene Zeilen zu zählen, verwenden Siemysqli_num_rows()auf dem Ergebnis-Set. - Der Status wird bei der nächsten Abfrage zurückgesetzt. Lesen Sie
mysqli_info()unmittelbar nach der betreffenden Abfrage. - Den String nicht parsen. Sein Wortlaut ändert sich je nach Anweisungstyp und Serverversion; verwenden Sie für die Logik die dedizierten Zähl-/Warnungsfunktionen.
Fazit
mysqli_info() ist eine schnelle Möglichkeit, eine für Menschen lesbare Zusammenfassung dessen zu erhalten, was die letzte Abfrage bewirkt hat – wie viele Datensätze verarbeitet wurden, wie viele Duplikate vorhanden waren und wie viele Warnungen aufgetreten sind. Verwenden Sie sie für Protokollierung und Debugging, und greifen Sie auf mysqli_affected_rows() oder mysqli_warning_count() zurück, wenn Ihr Code die Zahlen selbst benötigt. Weitere Informationen zum Ausführen von Abfragen finden Sie in der PHP MySQLi-Übersicht.