Signatur
Beschreibung
mysql_xdevapi\SqlStatementResult ist das Ergebnis-Objekt, das nach der Ausführung einer SQL-Anweisung über die mysql_xdevapi-Erweiterung zurückgegeben wird. Es ermöglicht den Zugriff auf alle Ergebniszeilen einer SELECT-Abfrage sowie auf Statusangaben wie die Anzahl betroffener Zeilen (affected rows) oder den zuletzt eingefügten Primärschlüssel.
Die Klasse implementiert das Interface mysql_xdevapi\BaseResult und bietet damit einheitliche Methoden zum Durchlaufen von Ergebnismengen. Für SQL-Anweisungen, die mehrere Ergebnismengen liefern (z. B. gespeicherte Prozeduren mit mehreren SELECT-Anweisungen), kann mit nextResult() zur nächsten Ergebnismenge gewechselt werden.
Typischerweise wird dieses Objekt nicht direkt instanziiert, sondern als Rückgabewert von mysql_xdevapi\SqlStatement::execute() erhalten. Es eignet sich besonders für Anwendungsfälle, bei denen rohe SQL-Anweisungen statt des Document-Store-APIs benötigt werden, etwa bei komplexen JOIN-Abfragen oder datenbankspezifischen Operationen.
fetchOne()– Gibt die nächste Zeile als Array zurück.fetchAll()– Gibt alle verbleibenden Zeilen zurück.getAffectedItemsCount()– Anzahl betroffener Zeilen bei DML-Operationen.getLastInsertId()– Zuletzt generierter Auto-Increment-Wert.nextResult()– Wechselt zur nächsten Ergebnismenge.
Beispiele
SELECT-Abfrage ausführen und Zeilen abrufen
<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
// Rohe SQL-Anweisung ausführen
$statement = $session->sql('SELECT id, name, email FROM users WHERE active = 1 LIMIT 5');
/** @var mysql_xdevapi\SqlStatementResult $result */
$result = $statement->execute();
// Alle Zeilen auf einmal abrufen
$rows = $result->fetchAll();
foreach ($rows as $row) {
echo 'ID: ' . $row['id'] . ' | Name: ' . $row['name'] . ' | E-Mail: ' . $row['email'] . PHP_EOL;
}
$session->close();
INSERT ausführen und betroffene Zeilen sowie letzte ID abfragen
<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$result = $session->sql(
"INSERT INTO users (name, email, active) VALUES ('Charlie', 'charlie@example.com', 1)"
)->execute();
// Anzahl der eingefügten Zeilen
$affected = $result->getAffectedItemsCount();
echo 'Betroffene Zeilen: ' . $affected . PHP_EOL;
// Zuletzt generierter Auto-Increment-Primärschlüssel
$lastId = $result->getLastInsertId();
echo 'Neue ID: ' . $lastId . PHP_EOL;
$session->close();
Mehrere Ergebnismengen mit nextResult() verarbeiten
<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
// Gespeicherte Prozedur, die zwei SELECT-Ergebnisse liefert
$result = $session->sql('CALL get_users_and_orders()')->execute();
do {
$rows = $result->fetchAll();
foreach ($rows as $row) {
print_r($row);
}
echo '--- Nächste Ergebnismenge ---' . PHP_EOL;
} while ($result->nextResult());
$session->close();
// Wichtig · Fallstricke
Sicherheitshinweis: Bei der Verwendung von $session->sql() mit Benutzereingaben besteht ein erhöhtes SQL-Injection-Risiko. Nutze grundsätzlich parametrisierte Anweisungen über mysql_xdevapi\SqlStatement::bind(), anstatt Eingaben direkt in den SQL-String zu konkatenieren.
Verfügbarkeit: Die mysql_xdevapi-Erweiterung ist nicht im Standard-PHP-Paket enthalten und muss separat über PECL installiert werden (pecl install mysql_xdevapi). Sie setzt einen MySQL-Server mit aktiviertem X Plugin (Port 33060) voraus.
Ergebniszeiger: fetchOne() und fetchAll() bewegen den internen Zeiger vorwärts. Nach einem fetchAll()-Aufruf liefert ein weiterer Abruf eine leere Ergebnismenge. Ein Zurücksetzen des Zeigers ist nicht möglich.