mysqli_stmt::prepare

mysqli_stmt_prepare

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::prepare -- mysqli_stmt_preparePrépare une requête SQL pour l'exécution

Description

Style orienté objet

public function mysqli_stmt::prepare(string $query): bool

Style procédural

function mysqli_stmt_prepare(mysqli_stmt $statement, string $query): bool

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 on passe une requête à mysqli_stmt_prepare() qui est plus longue que max_allowed_packet, les codes d'erreur en retour seront différents selon lors de l'utilisation de 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";

/* Crée une requête préparée */
$stmt = $mysqli->stmt_init();
$stmt->prepare("SELECT District FROM City WHERE Name=?");

/* Lie les paramètres aux marqueurs */
$stmt->bind_param("s", $city);

/* Exécute la requête */
$stmt->execute();

/* Lie les variables de résultat */
$stmt->bind_result($district);

/* Récupère la valeur */
$stmt->fetch();

printf("%s est dans le district de %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";

/* Crée une requête préparée */
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT District FROM City WHERE Name=?");

/* Lie les paramètres aux marqueurs */
mysqli_stmt_bind_param($stmt, "s", $city);

/* Exécute la requête */
mysqli_stmt_execute($stmt);

/* Lie les variables de résultat */
mysqli_stmt_bind_result($stmt, $district);

/* Récupère la valeur */
mysqli_stmt_fetch($stmt);

printf("%s est dans le district de %s\n", $city, $district);

Les exemples ci-dessus vont afficher :

Amersfoort est dans le district de Utrecht

Voir aussi