Maison > développement back-end > Problème PHP > Les tableaux peuvent-ils apparaître dans la condition Where de PHP ?

Les tableaux peuvent-ils apparaître dans la condition Where de PHP ?

PHPz
Libérer: 2023-04-19 14:07:30
original
714 Les gens l'ont consulté

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);
?>
Copier après la connexion

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)";
Copier après la connexion

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();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal