(PHP 5, PHP 7, PHP 8)
mysqli_stmt::bind_param -- mysqli_stmt_bind_param — Lie des variables à une requête MySQL
Style orienté objet
Style procédural
Lie les variables pour les marqueurs de paramètre dans la requête préparé par mysqli_prepare() ou mysqli_stmt_prepare().
Note:
Si la taille des données dépasse la taille maximale d'un paquet, (
max_allowed_packet
), vous devez spécifier le caractèreb
dans le paramètretypes
et utiliser la fonction mysqli_stmt_send_long_data() pour envoyer le message par paquets.
Note:
Vous devez être prudent lors de l'utilisation de mysqli_stmt_bind_param() avec la fonction call_user_func_array(). Notez que mysqli_stmt_bind_param() nécessite que ses paramètres soient passés par référence, alors que la fonction call_user_func_array() peut accepter comme paramètre une liste de variables qui peuvent représenter des références ou des valeurs.
statement
Style procédural uniquement : Un objet mysqli_stmt retourné par la fonction mysqli_stmt_init().
types
Une chaîne de caractères qui contient un ou plusieurs caractères qui spécifient le type de la variable à lier :
Caractère | Description |
---|---|
i | correspond à une variable de type int |
d | correspond à une variable de type float |
s | correspond à une variable de type string |
b | correspond à une variable de type BLOB, qui sera envoyé par paquets |
var
vars
Le nombre de variables et la longueur de la chaîne de caractèrestypes
doivent correspondre aux paramètres de la requête.
Si le rapport d'erreurs mysqli est activé (MYSQLI_REPORT_ERROR
) et que l'opération demandée échoue, un avertissement est généré. Si, en plus, le mode est défini sur MYSQLI_REPORT_STRICT
, une mysqli_sql_exception est lancée à la place.
Exemple #1 Exemple avec mysqli_stmt::bind_param()
Style orienté objet
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);
$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;
$stmt->execute();
printf("%d row inserted.\n", $stmt->affected_rows);
$mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d row deleted.\n", $mysqli->affected_rows);
Style procédural
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');
$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;
mysqli_stmt_execute($stmt);
printf("%d row inserted.\n", mysqli_stmt_affected_rows($stmt));
mysqli_query($link, "DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d row deleted.\n", mysqli_affected_rows($link));
Les exemples ci-dessus vont afficher :
1 row inserted. 1 row deleted.
Exemple #2 Using ...
to provide arguments
The ...
operator can be used to provide variable-length argument list, e.g. in a WHERE IN
clause.
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$stmt = $mysqli->prepare("SELECT Language FROM CountryLanguage WHERE CountryCode IN (?, ?)");
$stmt->bind_param('ss', ...['DEU', 'POL']);
$stmt->execute();
$stmt->store_result();
printf("%d rows found.\n", $stmt->num_rows());
Les exemples ci-dessus vont afficher :
10 rows found.