Maison > Article > développement back-end > Les tableaux peuvent-ils apparaître dans la condition Where de PHP ?
En langage PHP, on utilise souvent des bases de données relationnelles, comme MySQL, Oracle, etc. Lorsque nous devons interroger des données dans la base de données, nous utilisons généralement la condition WHERE pour spécifier la portée de la requête.
En PHP, la requête de données utilisant les conditions WHERE est généralement implémentée en épissant des instructions SQL. Nous pouvons utiliser la classe PDO intégrée de PHP ou la classe mysqli pour nous connecter à la base de données et exécuter des instructions SQL.
Par exemple, lors de l'utilisation de la classe mysqli, nous pouvons interroger la condition WHERE via le code PHP suivant :
<?php $con = mysqli_connect("localhost","my_user","my_password","my_db"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } // Perform queries $result = mysqli_query($con,"SELECT * FROM customers WHERE age > 18"); while($row = mysqli_fetch_array($result)) { echo $row['name'] . " " . $row['age']; } mysqli_close($con); ?>
Dans le code ci-dessus, nous pouvons voir que nous utilisons la condition WHERE pour spécifier la portée de la requête et ajouter le requête Les résultats sont affichés sur la page.
Cependant, lors de l'utilisation de la condition WHERE, pouvons-nous transmettre un tableau comme condition de requête ?
La réponse est oui. Nous pouvons interroger le tableau en tant que condition WHERE en convertissant le tableau en chaîne.
Par exemple, si nous avons un tableau nommé $ages, qui contient les âges qui doivent être interrogés, alors nous pouvons utiliser la méthode suivante pour convertir le tableau en chaîne et interroger :
$ages = array(18, 20, 22); $ages_str = implode(",", $ages); $sql = "SELECT * FROM customers WHERE age IN ($ages_str)";
Dans le code ci-dessus, nous pass La fonction implode convertit le tableau $ages en une chaîne séparée par des virgules et l'utilise comme condition de requête.
Bien entendu, cette méthode doit être notée car des problèmes d'injection SQL peuvent survenir. S'il y a des caractères spéciaux dans notre tableau, ils peuvent être utilisés par des utilisateurs malveillants pour effectuer des attaques par injection.
Par conséquent, afin d'éviter les problèmes d'injection SQL, nous devons utiliser des instructions préparées pour éviter de tels problèmes.
Par exemple, en utilisant la fonction de prétraitement mysqli, nous pouvons modifier le code ci-dessus sous la forme suivante :
$ages = array(18, 20, 22); $values = implode(",", array_fill(0, count($ages), "?")); $sql = "SELECT * FROM customers WHERE age IN ($values)"; $stmt = $mysqli->prepare($sql); foreach ($ages as $i => $age) { $stmt->bind_param('i', $ages[$i]); } $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { echo $row['name'] . " " . $row['age']; } $stmt->close();
Dans le code ci-dessus, nous utilisons la méthode d'instruction de prétraitement mysqli et la remplaçons par des espaces réservés (?) Conditions de requête, évitant ainsi le problème de l'injection SQL.
Pour résumer, en PHP, nous pouvons utiliser des tableaux comme conditions WHERE pour les requêtes, mais nous devons faire attention aux éventuels problèmes d'injection SQL et utiliser des instructions préparées pour éviter ce problème.
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!