Start · Sprachen · PHP · Referenz · mysql_info

mysql_info

Funktion

Liefert eine Zeichenkette mit Informationen über die zuletzt ausgeführte MySQL-Anfrage (z. B. Anzahl betroffener Zeilen bei INSERT, UPDATE oder ALTER TABLE).

seit PHP 4.3.0 Kategorie: db

Signatur

mysql_info(resource $link_identifier = null): string|false

Beschreibung

mysql_info() gibt eine Zeichenkette zurück, die Details über die zuletzt ausgeführte SQL-Anfrage auf der angegebenen Datenbankverbindung enthält. Dies ist besonders nützlich nach Anweisungen wie INSERT INTO ... SELECT, LOAD DATA INFILE, ALTER TABLE oder UPDATE, bei denen MySQL intern mehrere Kennzahlen (z. B. geänderte, übersprungene, duplizierte Datensätze) bereitstellt.

Das Format der zurückgegebenen Zeichenkette ist abhängig vom ausgeführten Statement. Für ein UPDATE könnte die Ausgabe beispielsweise so aussehen: Rows matched: 10 Changed: 3 Warnings: 0. Diese Informationen lassen sich mit einem regulären Ausdruck auswerten, um einzelne Werte zu extrahieren.

Achtung: Die Funktion gibt false zurück, wenn die zuletzt ausgeführte Anfrage kein unterstützter Statement-Typ ist (z. B. einfache SELECT-Anfragen liefern keine Zusatzinformationen). Nicht alle SQL-Anweisungen erzeugen eine Info-Zeichenkette.

Wichtig: Die gesamte mysql_*-Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 vollständig entfernt. Für neue Projekte sollte stattdessen mysqli_info() oder PDO verwendet werden.

Parameter

Name Typ Default Beschreibung
$link_identifier resource null Die MySQL-Verbindungsressource, wie sie von mysql_connect() zurückgegeben wird. Wird kein Wert angegeben, wird die zuletzt geöffnete Verbindung verwendet.

Rückgabewert

Typ
string|false
Beschreibung
Gibt eine Zeichenkette mit Informationen zur zuletzt ausgeführten Anfrage zurück, oder false, wenn die Funktion keine Informationen für den betreffenden Query-Typ liefern kann.

Beispiele

Informationen nach einem UPDATE abrufen

<?php
$link = mysql_connect('localhost', 'root', 'geheim');
mysql_select_db('testdb', $link);

mysql_query("UPDATE users SET status = 'aktiv' WHERE last_login > '2024-01-01'", $link);

$info = mysql_info($link);
if ($info !== false) {
    echo "MySQL-Info: " . $info . PHP_EOL;
    // Beispielausgabe: Rows matched: 42  Changed: 15  Warnings: 0
} else {
    echo "Keine Info verfügbar." . PHP_EOL;
}

mysql_close($link);
?>
MySQL-Info: Rows matched: 42 Changed: 15 Warnings: 0

Einzelne Werte mit regulärem Ausdruck extrahieren

<?php
$link = mysql_connect('localhost', 'root', 'geheim');
mysql_select_db('testdb', $link);

mysql_query(
    "INSERT INTO archiv (id, name) SELECT id, name FROM benutzer WHERE aktiv = 0",
    $link
);

$info = mysql_info($link);
if ($info !== false && preg_match('/Records: (\d+)\s+Duplicates: (\d+)\s+Warnings: (\d+)/', $info, $matches)) {
    echo "Eingefügt:   " . $matches[1] . PHP_EOL;
    echo "Duplikate:   " . $matches[2] . PHP_EOL;
    echo "Warnungen:   " . $matches[3] . PHP_EOL;
} else {
    echo "Keine Zusatzinformationen verfügbar." . PHP_EOL;
}

mysql_close($link);
?>
Eingefügt: 7 Duplikate: 0 Warnungen: 0

// Wichtig · Fallstricke

Deprecation-Hinweis: Die mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet erklärt und in PHP 7.0.0 vollständig entfernt. Code, der diese Funktion verwendet, lässt sich unter PHP 7+ nicht mehr ausführen. Verwende stattdessen mysqli_info() (prozedural) oder die äquivalente Methode in PDO.

Unterstützte Statements: Nicht alle SQL-Anweisungen erzeugen eine Info-Zeichenkette. Folgende Typen werden von MySQL unterstützt: INSERT INTO ... SELECT, INSERT INTO ... VALUES (...),(...)..., LOAD DATA INFILE, ALTER TABLE und UPDATE. Einfache SELECT- oder DELETE-Statements liefern false.

Das Format der Rückgabezeichenkette ist sprachabhängig von der MySQL-Server-Konfiguration und sollte daher immer per regulärem Ausdruck und nicht durch Zeichenkettenvergleich ausgewertet werden.