(PHP 5, PHP 7, PHP 8)
mysqli_stmt::prepare -- mysqli_stmt_prepare — Bereitet eine SQL-Anweisung zur Ausführung vor
Objektorientierter Stil
Prozeduraler Stil
Bereitet eine Anweisung zur Ausführung vor. Die Abfrage muss aus einer einzigen SQL-Anweisung bestehen.
Die Anweisungsvorlage darf null oder mehr Fragezeichen-Parametermarker
(?
) - auch Platzhalter genannt - enthalten. Diese
Parametermarker müssen vor der Ausführung der Anweisung mittels
mysqli_stmt_bind_param() an Anwendungsvariablen gebunden
werden.
Hinweis:
Wenn eine Anweisung an mysqli_stmt_prepare() übergeben wird, die größer ist als die vom Server maximal erlaubte Paketgröße (
max_allowed_packet
), hängen die zurückgegebenen Fehlercodes davon ab, ob der MySQL Native Driver (mysqlnd
) oder die MySQL Client Library (libmysqlclient
) verwendet wird. Die Funktion verhält sich wie folgt:
mysqlnd
gibt unter Linux den Fehlercode 1153 zurück. Diese Fehlermeldung bedeutetgot a packet bigger than.max_allowed_packet
bytes
mysqlnd
gibt unter Windows den Fehlercode 2006 zurück. Diese Fehlermeldung bedeutetserver has gone away.
libmysqlclient
gibt auf allen Plattformen den Fehlercode 2006 zurück. Diese Fehlermeldung bedeutetserver has gone away.
statement
Nur bei prozeduralem Aufruf: ein von mysqli_stmt_init() zurückgegebenes mysqli_stmt-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).
If mysqli error reporting is enabled (MYSQLI_REPORT_ERROR
) and the requested operation fails,
a warning is generated. If, in addition, the mode is set to MYSQLI_REPORT_STRICT
,
a mysqli_sql_exception is thrown instead.
Beispiel #1 mysqli_stmt::prepare()-Beispiel
Objektorientierter Stil
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$city = "Amersfoort";
/* Vorbereitete Anweisung erstellen */
$stmt = $mysqli->stmt_init();
$stmt->prepare("SELECT District FROM City WHERE Name=?");
/* Parameter für die Platzhalter binden */
$stmt->bind_param("s", $city);
/* Anfrage ausführen */
$stmt->execute();
/* Ergebnisvariablen binden */
$stmt->bind_result($district);
/* Wert abrufen */
$stmt->fetch();
printf("%s liegt im Bezirk %s\n", $city, $district);
Prozeduraler Stil
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$city = "Amersfoort";
/* Vorbereitete Anweisung erstellen */
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT District FROM City WHERE Name=?");
/* Parameter an Platzhalter binden */
mysqli_stmt_bind_param($stmt, "s", $city);
/* Anfrage ausführen */
mysqli_stmt_execute($stmt);
/* Ergebnisvariablen binden */
mysqli_stmt_bind_result($stmt, $district);
/* Wert abrufen */
mysqli_stmt_fetch($stmt);
printf("%s liegt im Bezirk %s\n", $city, $district);
Die obigen Bespiele erzeugen folgende Ausgabe:
Amersfoort liegt im Bezirk Utrecht