(PHP 5, PHP 7, PHP 8)
mysqli::prepare -- mysqli_prepare — Bereitet eine SQL-Anweisung zur Ausführung vor
Objektorientierter Stil
Prozeduraler Stil
Bereitet eine SQL-Abfrage vor und gibt einen Zeiger auf die Anweisung zurück, der für weitere Operationen mit der Anweisung verwendet werden kann. 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.
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).
mysqli_prepare() gibt ein Anweisungs-Objekt zurück oder
false
, wenn ein Fehler aufgetreten ist.
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::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->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_prepare($link, "SELECT District FROM City WHERE Name=?");
/* Parameter für die 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