(PHP 5, PHP 7, PHP 8)
mysqli_stmt::prepare -- mysqli_stmt_prepare — Prépare une requête SQL pour l'exécution
Style orienté objet
Style procédural
Prépare la requête SQL query
, pour la session de travail
stmt
.
Les variables SQL doivent être associées à une variable PHP à l'aide de la fonction mysqli_stmt_bind_param() et/ou mysqli_stmt_bind_result(), avant d'exécuter la requête.
Note:
Si vous passez une requête à mysqli_stmt_prepare() qui est plus longue que
max_allowed_packet
, les codes d'erreur en retour seront différents selon si vous utilisez MySQL Native Driver (mysqlnd
) ou la MySQL Client Library (libmysqlclient
). Le comportement est défini comme suit:
mysqlnd
sur Linux retourne un code d'erreur de 1153. Le message d'erreur seragot a packet bigger than.max_allowed_packet
bytes
mysqlnd
sur Windows retourne un code d'erreur de 2006. Le message sera du typeserver has gone away.
libmysqlclient
sur toute plateforme retourne le code d'erreur 2006. Le message sera du typeserver has gone away.
statement
Style procédural uniquement : Un objet mysqli_stmt retourné par la fonction mysqli_stmt_init().
query
La requête, sous forme de chaîne. Elle doit être constituée d'une commande SQL valide et unique.
Ce paramètre peut inclure une ou plusieurs
variables SQL, en utilisant des points d'interrogation
(?
) aux bons endroits.
Note:
Les marques sont autorisées uniquement dans certains endroits des requêtes SQL. Par exemple, elles le sont dans la liste
VALUES()
d'une requêteINSERT
(pour spécifier les valeurs des colonnes pour une ligne), ou dans une comparaison d'une clauseWHERE
pour spécifier une valeur de comparaison. Cependant, elles ne sont pas autorisées pour les identifiants (de tables ou de colonnes).
Cette fonction retourne true
en cas de succès ou false
si une erreur survient.
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 pour mysqli_stmt::prepare()
Style orienté objet
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$city = "Amersfoort";
/* create a prepared statement */
$stmt = $mysqli->stmt_init();
$stmt->prepare("SELECT District FROM City WHERE Name=?");
/* bind parameters for markers */
$stmt->bind_param("s", $city);
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($district);
/* fetch value */
$stmt->fetch();
printf("%s is in district %s\n", $city, $district);
Style procédural
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$city = "Amersfoort";
/* create a prepared statement */
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT District FROM City WHERE Name=?");
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $city);
/* execute query */
mysqli_stmt_execute($stmt);
/* bind result variables */
mysqli_stmt_bind_result($stmt, $district);
/* fetch value */
mysqli_stmt_fetch($stmt);
printf("%s is in district %s\n", $city, $district);
Les exemples ci-dessus vont afficher :
Amersfoort is in district Utrecht