>(PHP 5, PHP 7, PHP 8)
mysqli::query -- mysqli_query — Exécute une requête sur la base de données
Description
Style orienté objet
public
mysqli::query(string
$query, int
$result_mode =
MYSQLI_STORE_RESULT): mysqli_result|bool
mysqli_query(mysqli
$mysql, string
$query, int
$result_mode =
MYSQLI_STORE_RESULT): mysqli_result|bool
Avertissement
Avertissement de Sécurité : injection SQL
Si la requête contiens des variables d'entrées alors des
déclarations préparées paramétrisées
devrait être utilisé à la place. Alternativement, les données doivent être correctement
formatées et toutes les chaînes de caractères doivent être échappées en utilisant la fonction
mysqli_real_escape_string().
Pour les requêtes non-DML (qui n'est pas un INSERT, un UPDATE ou un DELETE),
cette fonction est similaire à appeler
mysqli_real_query() suivie de
mysqli_use_result() ou
mysqli_store_result().
Note:
Si vous passez une requête à
mysqli_query() 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
-
mysql
-
Seulement en style procédural : Un objet mysqli
retourné par la fonction mysqli_connect() ou par la
fonction mysqli_init().
-
query
-
La requête, sous la forme d'une chaîne de caractères.
-
result_mode
-
Le mode de résultat peut être l'une des 3 constantes indiquant comment
le résultat sera retourné par le serveur MySQL.
MYSQLI_STORE_RESULT (par défaut) - renvoie un objet mysqli_result
avec un ensemble de résultats mis en mémoire tampon.
MYSQLI_USE_RESULT - renvoie un objet mysqli_result
avec un ensemble de résultats non tamponnés.
Tant qu'il y a des enregistrements en attente d'être récupérés, la ligne de connexion sera occupée
et tous les appels suivants renverront l'erreur Commands out of sync.
Pour éviter l'erreur, tous les enregistrements doivent être récupérés du serveur ou l'ensemble
de résultats doit être écarté en appelant la mysqli_free_result().
MYSQLI_ASYNC (disponible avec mysqlnd) - la requête est exécutée
de manière asynchrone et aucun ensemble de résultats n'est immédiatement renvoyé.
mysqli_poll() est alors utilisée pour obtenir les résultats de telles requêtes.
Utilisée en combinaison avec la constante
MYSQLI_STORE_RESULT ou MYSQLI_USE_RESULT.
Valeurs de retour
Retourne false en cas d'échec. Pour des requêtes réussites qui produisent
un jeu de résultat tel que SELECT, SHOW, DESCRIBE ou
EXPLAIN, mysqli_query() retournera un
objet mysqli_result. Pour les autres types de
requêtes ayant réussi, mysqli_query() retournera true.
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 avec mysqli::query()
Style orienté objet
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* "Create table" ne retournera aucun jeu de résultats */
$mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City");
printf("Table myCity créée avec succès.\n");
/* Requête "Select" retourne un jeu de résultats */
$result = $mysqli->query("SELECT Name FROM City LIMIT 10");
printf("Select a retourné %d lignes.\n", $result->num_rows);
/* Si nous avons à récupérer beaucoup de données, nous utilisons MYSQLI_USE_RESULT */
$result = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT);
/* Notez que nous ne pouvons exécuter aucune fonction qui agit sur le serveur tant que
le jeu de résultats n'est pas clos. Tous les appels retourneront un 'out of sync' */
$mysqli->query("SET @a:='this will not work'");
Style procédural
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* "Create table" ne retournera aucun jeu de résultats */
mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");
printf("Table myCity créée avec succès.\n");
/* Requête "Select" retourne un jeu de résultats */
$result = mysqli_query($link, "SELECT Name FROM City LIMIT 10");
printf("Select a retourné %d lignes.\n", mysqli_num_rows($result));
/* Si nous avons à récupérer beaucoup de données, nous utilisons MYSQLI_USE_RESULT */
$result = mysqli_query($link, "SELECT * FROM City", MYSQLI_USE_RESULT);
/* Notez que nous ne pouvons exécuter aucune fonction qui agit sur le serveur tant que
le jeu de résultats n'est pas clos. Tous les appels retourneront un 'out of sync' */
mysqli_query($link, "SET @a:='this will not work'");
Les exemples ci-dessus vont afficher :
Table myCity créée avec succès.
Select a retourné 10 lignes.
Fatal error: Uncaught mysqli_sql_exception: Commands out of sync; you can't run this command now in...
Voir aussi
- mysqli_execute_query() - Prepares, binds parameters, and executes SQL statement
- mysqli_real_query() - Exécute une requête SQL
- mysqli_multi_query() - Exécute une ou plusieurs requêtes sur la base de donnée
- mysqli_prepare() - Prépare une requête SQL pour l'exécution
- mysqli_free_result() - Libère la mémoire associée à un résultat