mysqli
PHP Manual

mysqli::query

mysqli_query

(PHP 5)

mysqli::query -- mysqli_queryExécute une requête sur la base de données

Description

Style orienté objet

mixed mysqli::query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

Style procédural

mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

Exécute une requête sur la base de données.

En termes de fonctionnalités, utiliser cette fonction revient à 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 (libmysql). 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".

  • libmysql sur toute plateforme retourne le code d'erreur 2006. Le message sera du type "server has gone away".

Liste de paramètres

link

Seulement en style procédural : Un identifiant de lien 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.

Les données contenues dans la requête doivent être échappées.

resultmode

Soit la constante MYSQLI_USE_RESULT, soit la constante MYSQLI_STORE_RESULT, suivant le comportement désiré. Par défaut, la constante MYSQLI_STORE_RESULT est utilisé.

Si vous utilisez la constante MYSQLI_USE_RESULT, tous les appels suivants retourneront une erreur Commands out of sync tant que vous n'aurez pas appelé la fonction mysqli_free_result().

Avec la constante MYSQLI_ASYNC (disponible avec mysqlnd), il est possible de faire des requêtes asynchrone. mysqli_poll() est alors utilisé pour lire les résultats de ce type de requêtes.

Valeurs de retour

Retourne FALSE en cas d'échec. Pour des requêtes SELECT, SHOW, DESCRIBE ou EXPLAIN réussies, mysqli_query() retournera un objet mysqli_result. Pour les autres types de requêtes ayant réussies, mysqli_query() retournera TRUE.

Historique

Version Description
5.3.0 Ajout des requêtes asynchrones.

Exemples

Exemple #1 Exemple avec mysqli::query()

Style orienté objet

<?php
$mysqli 
= new mysqli("localhost""my_user""my_password""world");

/* Vérification de la connexion */
if (mysqli->connect_errno) {
    
printf("Échec de la connexion : %s\n"mysqli->connect_error);
    exit();
}

/* "Create table" ne retournera aucun jeu de résultats */
if ($mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City") === TRUE) {
    
printf("Table myCity créée avec succès.\n");
}

/* Requête "Select" retourne un jeu de résultats */
if ($result $mysqli->query("SELECT Name FROM City LIMIT 10")) {
    
printf("Select a retourné %d lignes.\n"$result->num_rows);

    
/* Libération du jeu de résultats */
    
$result->close();
}

/* Si nous avons à récupérer beaucoup de données, nous utilisons MYSQLI_USE_RESULT */
if ($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' 
    */
    
if (!$mysqli->query("SET @a:='this will not work'")) {
        
printf("Erreur : %s\n"$mysqli->error);
    }
    
$result->close();
}

$mysqli->close();
?>

Style procédural

<?php
$link 
mysqli_connect("localhost""my_user""my_password""world");

/* Vérification de la connexion */
if (mysqli_connect_errno()) {
    
printf("Échec de la connexion : %s\n"mysqli_connect_error());
    exit();
}

/* "Create table" ne retournera aucun jeu de résultats */
if (mysqli_query($link"CREATE TEMPORARY TABLE myCity LIKE City") === TRUE) {
    
printf("Table myCity créée avec succès.\n");
}

/* Requête "Select" retourne un jeu de résultats */
if ($result mysqli_query($link"SELECT Name FROM City LIMIT 10")) {
    
printf("Select a retourné %d lignes.\n"mysqli_num_rows($result));

    
/* Libération du jeu de résultats */
    
mysqli_free_result($result);
}

/* Si nous avons à récupérer beaucoup de données, nous utilisons MYSQLI_USE_RESULT */
if ($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' 
    */
    
if (!mysqli_query($link"SET @a:='this will not work'")) {
        
printf("Erreur : %s\n"mysqli_error($link));
    }
    
mysqli_free_result($result);
}

mysqli_close($link);
?>

Les exemples ci-dessus vont afficher :

Table myCity créée avec succès.
Select a retourné 10 lignes.
Erreur : Commands out of sync;  You can't run this command now

Voir aussi


mysqli
PHP Manual