Bereitet eine SQL-Anweisung zur Ausführung vor

# mysqli_stmt::prepare

# mysqli_stmt_prepare

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::prepare -- mysqli_stmt_prepare — Bereitet eine SQL-Anweisung zur Ausführung vor

### Beschreibung

Objektorientierter Stil

public function mysqli_stmt::prepare(string `$query`): bool

Prozeduraler Stil

function mysqli_stmt_prepare(mysqli_stmt `$statement`, string `$query`): bool

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 bedeutet got a packet bigger than `max_allowed_packet` bytes.

> - `mysqlnd` gibt unter Windows den Fehlercode 2006 zurück. Diese Fehlermeldung bedeutet server has gone away.

> - `libmysqlclient` gibt auf allen Plattformen den Fehlercode 2006 zurück. Diese Fehlermeldung bedeutet server has gone away.

### Parameter-Liste

`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 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).

### Rückgabewerte

Gibt bei Erfolg `true` zurück. Bei einem Fehler wird `false` zurückgegeben.

### Fehler/Exceptions

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.

### Beispiele

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

### Siehe auch

- mysqli_stmt_init() - Initialisiert eine Anweisung und liefert ein Objekt für die Verwendung mit mysqli_stmt_prepare
- mysqli_stmt_execute() - Führt eine vorbereitete Anweisung aus
- mysqli_stmt_fetch() - Ruft Ergebnisse aus einer vorbereiteten Anweisung in gebundene Variablen ab
- mysqli_stmt_bind_param() - Bindet Variablen als Parameter an eine vorbereitete Anweisung (prepared statement)
- mysqli_stmt_bind_result() - Bindet Variablen an eine vorbereitete Anweisung (prepared statement), um das Ergebnis einer Abfrage abzulegen
- mysqli_stmt_get_result() - Ruft die Ergebnismenge aus einer vorbereiteten Anweisung als mysqli_result-Objekt ab
- mysqli_stmt_close() - Schließt eine vorbereitete Anweisung (prepared statement)

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open