(PHP 8 >= 8.2.0)
mysqli::execute_query -- mysqli_execute_query — Bereitet eine SQL-Anweisung vor, bindet die Parameter und führt die Anweisung aus
Objektorientierter Stil
Prozeduraler Stil
Bereitet eine SQL-Anweisung vor, bindet die Parameter und führt die Anweisung aus. Die Methode mysqli::execute_query() ist eine Zusammenfassung von mysqli::prepare(), mysqli_stmt::bind_param(), mysqli_stmt::execute() und mysqli_stmt::get_result().
Die Anweisungsvorlage darf null oder mehr Fragezeichen-Parametermarker
(?
) - auch Platzhalter genannt - enthalten. Die
Parameterwerte müssen mit dem Parameter params
als
Array angegeben werden.
Eine vorbereitete Anweisung wird im Hintergrund erstellt und ist nie außerhalb der Funktion sichtbar. Es ist unmöglich, auf die Eigenschaften der Anweisung zuzugreifen, wie es mit einem mysqli_stmt-Objekt möglich wäre. Aufgrund dieser Einschränkung werden die Statusinformationen in das mysqli-Objekt kopiert und stehen über dessen Methoden, z. B. mysqli_affected_rows() oder mysqli_error(), zur Verfügung.
Hinweis:
Wenn eine Anweisung an mysqli_execute_query() übergeben wird, die größer ist als die vom Server maximal erlaubte Paketgröße (
max_allowed_packet
), hängen die zurückgegebenen Fehlercodes vom Betriebssystem ab. Die Funktion verhält sich wie folgt:
Unter Linux gibt sie den Fehlercode 1153 zurück. Diese Fehlermeldung bedeutet
got a packet bigger than.max_allowed_packet
bytesUnter Windows gibt sie den Fehlercode 2006 zurück. Diese Fehlermeldung bedeutet
server has gone away.
mysql
Nur bei prozeduralem Aufruf: ein von mysqli_connect() oder mysqli_init() zurückgegebenes mysqli-Objekt.
query
Die Zeichenkette mit der Abfrage. Sie darf nur eine SQL-Anweisung enthalten.
Die SQL-Anweisung darf null oder mehr Platzhalter für Parameter
enthalten, die an den entsprechenden Stellen durch Fragezeichen
(?
) dargestellt werden.
Hinweis:
Die Platzhalter sind nur an bestimmten Stellen einer SQL-Anweisung zulässig. Zum Beispiel sind sie bei einer
INSERT
-Anweisung in derVALUES()
-Liste erlaubt, um die Werte für die Spalten einer Zeile anzugeben, oder bei einerWHERE
-Klausel im Vergleich mit einer Spalte, um einen Vergleichswert anzugeben. Nicht zulässig sind sie hingegen für Bezeichner (wie Tabellen- oder Spaltennamen).
params
Eine optionale Array-Liste mit so vielen Elementen, wie es gebundene Parameter in der auszuführenden SQL-Anweisung gibt. Jeder Wert wird wie eine Zeichenkette behandelt.
Gibt bei einem Fehler false
zurück. Bei erfolgreichen Abfragen, die eine
Ergebnismenge erzeugen, also z. B. SELECT, SHOW, DESCRIBE
oder EXPLAIN
, wird ein
mysqli_result-Objekt zurückgegeben. Bei anderen
erfolgreichen Abfragen wird true
zurückgegeben.
Beispiel #1 mysqli::execute_query()-Beispiel
Objektorientierter Stil
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$query = 'SELECT Name, District FROM City WHERE CountryCode=? ORDER BY Name LIMIT 5';
$result = $mysqli->execute_query($query, ['DEU']);
foreach ($result as $row) {
printf("%s (%s)\n", $row["Name"], $row["District"]);
}
Prozeduraler Stil
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = 'SELECT Name, District FROM City WHERE CountryCode=? ORDER BY Name LIMIT 5';
$result = mysqli_execute_query($link, $query, ['DEU']);
foreach ($result as $row) {
printf("%s (%s)\n", $row["Name"], $row["District"]);
}
Oben gezeigte Beispiele erzeugen eine ähnliche Ausgabe wie:
Aachen (Nordrhein-Westfalen) Augsburg (Baijeri) Bergisch Gladbach (Nordrhein-Westfalen) Berlin (Berliini) Bielefeld (Nordrhein-Westfalen)