(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
$statement,$types,&$var,&...$varsLie 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), il faut spécifier le caractèrebdans le paramètretypeset utiliser la fonction mysqli_stmt_send_long_data() pour envoyer le message par paquets.
Note:
Il faut être prudent lors de l'utilisation de mysqli_stmt_bind_param() avec la fonction call_user_func_array(). À noter 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.
statementtypesUne 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 |
varvars
Le nombre de variables et la longueur de la chaîne de caractères
types 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 ligne insérée.\n", $stmt->affected_rows);
/* Nettoie la table CountryLanguage */
$mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d ligne supprimée.\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 ligne insérée.\n", mysqli_stmt_affected_rows($stmt));
/* Nettoie la table CountryLanguage */
mysqli_query($link, "DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d ligne supprimée.\n", mysqli_affected_rows($link));Les exemples ci-dessus vont afficher :
1 ligne insérée. 1 ligne supprimée.
Exemple #2 Utilisation de ... pour fournir des arguments
L'opérateur ... peut être utilisé pour fournir une liste
d'arguments de longueur variable, par exemple dans une clause WHERE IN.
<?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 (?, ?)");
/* Utilisation de ... pour fournir des arguments */
$stmt->bind_param('ss', ...['DEU', 'POL']);
$stmt->execute();
$stmt->store_result();
printf("%d lignes trouvées.\n", $stmt->num_rows());Les exemples ci-dessus vont afficher :
10 lignes trouvées.