mysqli_stmt::prepare
mysqli_stmt_prepare
(PHP 5, PHP 7)
mysqli_stmt::prepare -- mysqli_stmt_prepare — Prépare une requête SQL pour l'exécution
Description
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 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
-
stmt
-
Style procédural uniquement : Un identifiant de requête 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:
Il ne faut pas ajouter de point-virgule ou de \g à la fin de la requête.
Note:
Les variables SQL ne sont possibles que dans certaines clauses de la requête SQL. Par exemple, elles peuvent être placées dans des clause VALUES() d'une requête INSERT (pour spécifier une valeur à insérer), ou dans une clause de condition WHERE.
Cependant, elles ne sont pas autorisées pour les identifiants (de tables ou de colonnes), dans les listes de colonnes d'un SELECT, ou pour spécifier des opérateurs comme =. Cette dernière restriction est liée au fait qu'il est impossible de déterminer le type. En général, les variables SQL ne sont valides que dans les commandes de manipulation de données ("Data Manipulation Language" (DML)), et non dans les structures du langages SQL ("Data Definition Language" (DDL)).
Exemples
Exemple #1 Style orienté objet
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* Vérifie la connexion */
if (mysqli_connect_errno()) {
printf("Échec de la connexion : %s\n", mysqli_connect_error());
exit();
}
$city = "Amersfoort";
/* Création d'une requête préparée */
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("SELECT District FROM City WHERE Name=?")) {
/* Association des variables SQL */
$stmt->bind_param("s", $city);
/* Exécution de la requête */
$stmt->execute();
/* Association des variables de résultats */
$stmt->bind_result($district);
/* Lecture des valeurs */
$stmt->fetch();
printf("%s est dans la région de %s\n", $city, $district);
/* Fermeture de la commande */
$stmt->close();
}
/* Fermeture de la connexion */
$mysqli->close();
?>
Exemple #2 Style procédural
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* Vérifie la connexion */
if (mysqli_connect_errno()) {
printf("Échec de la connexion : %s\n", mysqli_connect_error());
exit();
}
$city = "Amersfoort";
/* Création d'une requête préparée */
$stmt = mysqli_stmt_init($link);
if (mysqli_stmt_prepare($stmt, 'SELECT District FROM City WHERE Name=?')) {
/* Association des variables SQL */
mysqli_stmt_bind_param($stmt, "s", $city);
/* Exécution de la requête */
mysqli_stmt_execute($stmt);
/* Association des variables de résultats */
mysqli_stmt_bind_result($stmt, $district);
/* Lecture des valeurs */
mysqli_stmt_fetch($stmt);
printf("%s est dans la région de %s\n", $city, $district);
/* Fermeture de la commande */
mysqli_stmt_close($stmt);
}
/* Fermeture de la connexion */
mysqli_close($link);
?>
Les exemples ci-dessus vont afficher :
Amersfoort est dans la région de Utrecht
Voir aussi
- mysqli_stmt_init() - Initialise une commande MySQL
- mysqli_stmt_execute() - Exécute une requête préparée
- mysqli_stmt_fetch() - Lit des résultats depuis une requête MySQL préparée dans des variables liées
- mysqli_stmt_bind_param() - Lie des variables à une requête MySQL
- mysqli_stmt_bind_result() - Lie des variables à un jeu de résultats
- mysqli_stmt_get_result() - Récupère un jeu de résultats depuis une requête préparée
- mysqli_stmt_close() - Termine une requête préparée
Version en cache
15/12/2024 00:17:35 Cette version de la page est en cache (à la date du 15/12/2024 00:17:35) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mysqli-stmt.prepare.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.