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.

Pour les requêtes non-DML (qui n'est pas un INSERT, un UPDATE ou un DELETE), cette fonction est similaire à appeler à 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

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()

<?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();
?>
<?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

LoadingChargement en cours