Maison >développement back-end >tutoriel php >Pourquoi les variables PHP provoquent-elles des erreurs lorsqu'elles sont utilisées dans la clause VALUES de MySQL ?

Pourquoi les variables PHP provoquent-elles des erreurs lorsqu'elles sont utilisées dans la clause VALUES de MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-21 15:17:10418parcourir

Why Do PHP Variables Cause Errors When Used in MySQL's VALUES Clause?

Comment inclure une variable PHP dans une instruction MySQL

Problème :

En PHP, utiliser une variable dans une L'instruction MySQL incluse dans VALUES provoque problèmes.

Question :

Pourquoi l'inclusion d'une variable dans VALUES entraîne-t-elle des erreurs ?

Réponse :

Il existe deux approches distinctes pour inclure des variables PHP dans les instructions MySQL correctement :

  1. Utiliser les instructions préparées :

    Pour les variables représentant des littéraux de données SQL (chaînes, nombres), des instructions préparées doivent être utilisées. Cela implique :

    • Définir des espaces réservés dans l'instruction SQL
    • Préparer la requête
    • Lier les variables aux espaces réservés
    • Exécuter la requête

    Exemple (mysqli) :

    $type = 'testing';
    $sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
    $mysqli->execute_query($sql, [$type, $reporter, $description]);
  2. Utiliser le filtrage de liste blanche :

    Pour toute autre variable représentant une partie de requête (par exemple, mot-clé , identifiant), ils doivent être filtrés via une liste blanche, garantissant que seules les valeurs autorisées sont utilisées. Exemple (en vérifiant orderby) :

    $orderby = $_GET['orderby'] ?: 'name';
    $allowed = ['name', 'price', 'qty'];
    $key = array_search($orderby, $allowed);
    if ($key === false) throw new InvalidArgumentException("Invalid field name");

Conclusion :

Le respect de ces principes protège contre l'injection SQL et garantit la bonne exécution des requêtes lorsque des variables PHP sont impliquées. Les instructions préparées doivent être utilisées pour les littéraux de données, tandis que la liste blanche garantit que seules les valeurs autorisées sont insérées dans d'autres parties de la requête.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn