PHP Préparations des déclarations dans MySQLi


Exemple

Veuillez lire Prévention de l'injection SQL avec des requêtes paramétrées pour une analyse complète des raisons pour lesquelles les instructions préparées vous aident à sécuriser vos instructions SQL contre les attaques par injection SQL.

La variable $conn est un objet MySQLi. Voir l' exemple de connexion MySQLi pour plus de détails.

Pour les deux exemples, nous supposons que $sql est

$sql = "SELECT column_1 
    FROM table 
    WHERE column_2 = ? 
        AND column_3 > ?";

Le ? représente les valeurs que nous fournirons plus tard. Veuillez noter que nous n'avons pas besoin de devis pour les espaces réservés, quel que soit le type. Nous pouvons également fournir uniquement des espaces réservés dans les parties de données de la requête, ce qui signifie SET , VALUES et WHERE . Vous ne pouvez pas utiliser d'espaces réservés dans les parties SELECT ou FROM .

Style orienté objet

if ($stmt = $conn->prepare($sql)) {
  $stmt->bind_param("si", $column_2_value, $column_3_value);
  $stmt->execute();

  $stmt->bind_result($column_1);
  $stmt->fetch();
  //Now use variable $column_1 one as if it were any other PHP variable
  $stmt->close();
}

Style procédural

if ($stmt = mysqli_prepare($conn, $sql)) {
  mysqli_stmt_bind_param($stmt, "si", $column_2_value, $column_3_value);
  mysqli_stmt_execute($stmt);
  // Fetch data here
  mysqli_stmt_close($stmt);
}

Le premier paramètre de $stmt->bind_param ou le second paramètre de mysqli_stmt_bind_param est déterminé par le type de données du paramètre correspondant dans la requête SQL:

Paramètre Type de données du paramètre lié
i entier
d double
s chaîne
b goutte

Votre liste de paramètres doit être dans l'ordre indiqué dans votre requête. Dans cet exemple, si signifie que le premier paramètre ( column_2 = ? ) Est une chaîne et le second paramètre ( column_3 > ? ) Est un entier.

Pour récupérer des données, voir Comment obtenir des données à partir d'une instruction préparée