PHP 8.4.1 Released!

mysqli::execute_query

mysqli_execute_query

(PHP 8 >= 8.2.0)

mysqli::execute_query -- mysqli_execute_queryBereitet eine SQL-Anweisung vor, bindet die Parameter und führt die Anweisung aus

Beschreibung

Objektorientierter Stil

public mysqli::execute_query(string $query, ?array $params = null): mysqli_result|bool

Prozeduraler Stil

mysqli_execute_query(mysqli $mysql, string $query, ?array $params = null): mysqli_result|bool

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 bytes.

  • Unter Windows gibt sie den Fehlercode 2006 zurück. Diese Fehlermeldung bedeutet server has gone away.

Parameter-Liste

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 der VALUES()-Liste erlaubt, um die Werte für die Spalten einer Zeile anzugeben, oder bei einer WHERE-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.

Rückgabewerte

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.

Beispiele

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)

Siehe auch

add a note

User Contributed Notes 1 note

up
1
theking2(at)king(dot).co.
11 months ago
A function to call a stored procedure with an arbitrary number of IN parameters and one OUT parameter, for instance returning affected row count. The return value of yhe function is this value.

<?php

/**
* call_sp Call the specified stored procedure with the given parameters.
* The first parameter is the name of the stored procedure.
* The remaining parameters are the (in) parameters to the stored procedure.
* the last (out) parameter should be an int, like state or number of affected rows.
*
* @param mixed $sp_name The name of the stored procedure to call.
* @param mixed $params The parameters to pass to the stored procedure.
* @return int The number of affected rows.
*/
function call_sp( \mysqli $db, string $sp_name, ...$params ): int
{
$sql = "CALL $sp_name( ";
$sql .= implode( ", ", array_fill( 0, count( $params ), "?" ) );
$sql .= ", @__affected );";

$result = $db->execute_query( $sql, $params );
$result = $db->query( "select @__affected;" );
$affected = (int) $result->fetch_column( 0 );
return
$affected;
}
To Top