(PHP 5, PHP 7)
mysqli_stmt::bind_param -- mysqli_stmt_bind_param — Bindet Variablen als Parameter an eine vorbereitete Anweisung (prepared statement)
Objektorientierter Stil
Prozeduraler Stil
Bindet Variablen an die Parameterplatzhalter einer SQL-Anweisung, die an mysqli_prepare() übergeben worden ist.
Hinweis:
Wenn die Größe des Inhalts einer Variablen die maximal erlaubte Paketgröße (max_allowed_packet) überschreitet, dann muss
b
intypes
spezifiziert werden und mysqli_stmt_send_long_data() verwendet werden, um die Daten paketweise zu verschicken.
Hinweis:
Vorsicht, wenn mysqli_stmt_bind_param() zusammen mit call_user_func_array() verwendet werden soll. mysqli_stmt_bind_param() erfordert, dass die Parameter als Referenzvariablen übergeben werden, wohingegen call_user_func_array() als Parameter eine Liste von Variablen akzeptiert, die sowohl Referenzen als auch Werte sein können.
stmt
Nur bei prozeduralem Aufruf: ein von mysqli_stmt_init() zurückgegebenes Statementobjekt.
types
Eine Zeichenkette, die eine oder mehrere Zeichen enthält, die die Typen der zu bindenden Variablen spezifizieren.
Zeichen | Beschreibung |
---|---|
i | die entsprechende Variable hat den Typ integer |
d | die entsprechende Variable hat den Typ double |
s | die entsprechende Variable hat den Typ string |
b | die entsprechende Variable ist ein BLOB und wird paketweise geschickt |
var1
Die Anzahl der Variablen und die Länge der Zeichenkette
types
müssen zu den Parametern in der Anweisung passen.
Gibt bei Erfolg TRUE
zurück. Im Fehlerfall wird FALSE
zurückgegeben.
Beispiel #1 Objektorientierter Stil
<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
/* prüfe Verbindung */
if (mysqli_connect_errno()) {
printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
exit();
}
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);
$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;
/* führe Anweisung aus */
$stmt->execute();
printf("%d Zeile eingefügt.\n", $stmt->affected_rows);
/* schließe Anweisung */
$stmt->close();
/* bereinige die Tabelle CountryLanguage */
$mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d Zeile gelöscht.\n", $mysqli->affected_rows);
/* schließe Verbindung */
$mysqli->close();
?>
Beispiel #2 Prozeduraler Stil
<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');
/* prüfe Verbindung */
if (!$link) {
printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
exit();
}
$stmt = mysqli_prepare($link, "INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssd', $code, $language, $official, $percent);
$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;
/* führe Anweisung aus */
mysqli_stmt_execute($stmt);
printf("%d Zeile eingefügt.\n", mysqli_stmt_affected_rows($stmt));
/* schließe Anweisung */
mysqli_stmt_close($stmt);
/* bereinige die Tabelle CountryLanguage */
mysqli_query($link, "DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d Zeile gelöscht.\n", mysqli_affected_rows($link));
/* schließe Verbindung */
mysqli_close($link);
?>
Die obigen Bespiele erzeugen folgende Ausgabe:
1 Row inserted. 1 Row deleted.