(PHP 5, PHP 7, PHP 8)
mysqli_stmt::prepare -- mysqli_stmt_prepare — Prépare une requête SQL pour l'exécution
Description
Style orienté objet
public
mysqli_stmt::prepare(string
$query
): mixed
mysqli_stmt_prepare(mysqli_stmt
$statement
, string
$query
): bool
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 sera got a packet bigger than
max_allowed_packet
bytes.
-
mysqlnd
sur Windows retourne un code d'erreur de 2006.
Le message sera du type server has gone away.
-
libmysqlclient
sur toute plateforme retourne le code d'erreur
2006. Le message sera du type server has gone away.
Liste de paramètres
-
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ête
INSERT
(pour spécifier les valeurs des colonnes pour une ligne),
ou dans une comparaison d'une clause WHERE
pour spécifier une
valeur de comparaison.
Cependant, elles ne sont pas autorisées pour les identifiants
(de tables ou de colonnes).
Valeurs de retour
Cette fonction retourne true
en cas de succès ou false
si une erreur survient.
Erreurs / Exceptions
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.
Exemples
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
Voir aussi