Heim  >  Artikel  >  Backend-Entwicklung  >  Können Arrays in der Where-Bedingung von PHP erscheinen?

Können Arrays in der Where-Bedingung von PHP erscheinen?

PHPz
PHPzOriginal
2023-04-19 11:38:43642Durchsuche

In der PHP-Sprache verwenden wir häufig relationale Datenbanken wie MySQL, Oracle usw. Wenn wir Daten in der Datenbank abfragen müssen, verwenden wir normalerweise die WHERE-Bedingung, um den Umfang der Abfrage anzugeben.

In PHP wird die Datenabfrage mithilfe von WHERE-Bedingungen im Allgemeinen durch das Zusammenfügen von SQL-Anweisungen implementiert. Wir können die in PHP integrierte PDO-Klasse oder die MySQL-Klasse verwenden, um eine Verbindung zur Datenbank herzustellen und SQL-Anweisungen auszuführen.

Wenn wir beispielsweise die Klasse mysqli verwenden, können wir WHERE-Bedingungen über den folgenden PHP-Code abfragen:

<?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);
?>

Im obigen Code können wir sehen, dass wir The WHERE verwenden Mit der Bedingung wird der Umfang der Abfrage angegeben und die Abfrageergebnisse werden auf der Seite ausgegeben.

Können wir jedoch bei Verwendung der WHERE-Bedingung ein Array als Abfragebedingung übergeben?

Die Antwort ist ja. Wir können das Array als WHERE-Bedingung abfragen, indem wir das Array in einen String konvertieren.

Wenn wir beispielsweise ein Array mit dem Namen $ages haben, das das abzufragende Alter enthält, können wir das Array mit der folgenden Methode in einen String konvertieren und abfragen: #🎜🎜 #

$ages = array(18, 20, 22);
$ages_str = implode(",", $ages);
$sql = "SELECT * FROM customers WHERE age IN ($ages_str)";
Im obigen Code verwenden wir die Funktion implode, um das Array $ages in eine durch Kommas getrennte Zeichenfolge umzuwandeln und diese als Abfragebedingung zu verwenden.

Natürlich muss bei dieser Methode beachtet werden, dass es zu SQL-Injection-Problemen kommen kann. Wenn unser Array einige Sonderzeichen enthält, kann es von böswilligen Benutzern für Injektionsangriffe verwendet werden.

Um SQL-Injection-Probleme zu vermeiden, sollten wir daher vorbereitete Anweisungen verwenden, um dieses Problem zu vermeiden.

Zum Beispiel können wir mithilfe der MySQLi-Vorverarbeitungsfunktion den obigen Code in die folgende Form ändern:

$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();
Im obigen Code verwenden wir die MySQLi-Vorverarbeitungsanweisungsmethode. Ersetzen der Abfragebedingungen durch Platzhalter (?), wodurch das Problem der SQL-Injection vermieden wird.

Zusammenfassend lässt sich sagen, dass wir in PHP Arrays als WHERE-Bedingungen für Abfragen verwenden können, aber wir müssen auf mögliche SQL-Injection-Probleme achten und sollten Vorverarbeitungsanweisungen verwenden, um dieses Problem zu vermeiden.

Das obige ist der detaillierte Inhalt vonKönnen Arrays in der Where-Bedingung von PHP erscheinen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn