Prépare une requête SQL pour l'exécution

# mysqli_stmt::prepare

# mysqli_stmt_prepare

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::prepare -- mysqli_stmt_prepare — Pré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

- 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 en tant qu'objet mysqli_result
- mysqli_stmt_close() - Termine une requête préparée

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open