Heim >Backend-Entwicklung >PHP-Tutorial >Wie binde ich ein String-Array effizient an eine MySQL-WHERE-IN(?)-Klausel mithilfe der vorbereiteten mysqli-Anweisungen von PHP?

Wie binde ich ein String-Array effizient an eine MySQL-WHERE-IN(?)-Klausel mithilfe der vorbereiteten mysqli-Anweisungen von PHP?

Linda Hamilton
Linda HamiltonOriginal
2024-12-24 01:57:13949Durchsuche

How to Efficiently Bind an Array of Strings to a MySQL WHERE IN(?) Clause Using PHP's mysqli Prepared Statements?

Binden eines Arrays von Strings an eine WHERE IN(?)-Klausel

Binden eines Arrays von Werten an die WHERE IN(?)-Klausel ist eine häufige MySQL-Aufgabe. Bei der Verwendung der vorbereiteten mysqli-Anweisungen von PHP kann es schwierig sein, dies zu erreichen, wenn Sie nicht mit den Einschränkungen und Nuancen der Funktion bind_param() vertraut sind.

Das Problem

Beim Versuch, ein Array von Werten mit bind_param() an die IN(?)-Klausel zu binden, können Probleme auftreten, die zu einem Fehlschlag führen Ausführung.

Die Lösung

Es gibt verschiedene Möglichkeiten, diese Aufgabe anzugehen, abhängig von der PHP-Version, die Sie verwenden:

PHP 8.2 und höher

  • execute_query() Funktion: Mit dieser Funktion können Sie ein Array von Werten direkt an IN(?) übergeben. Es vereinfacht den Prozess mit einer einzigen Codezeile.

PHP 8.1

  • Übergabe eines Arrays anexecute(): In PHP 8.1 können Sie für vorbereitete Anweisungen ein Array direkt an Execute() übergeben, was das Binden mehrerer Befehle vereinfacht Werte.

Frühere PHP-Versionen

Für ältere Versionen ist ein aufwändigerer Ansatz erforderlich:

  1. Erstellen Sie eine Zeichenfolge mit so viele Fragezeichen (?) wie die Anzahl der Elemente im Array.
  2. Fügen Sie die Zeichenfolge mit Platzhaltern zur Abfrage hinzu string.
  3. Erstellen Sie mit str_repeat() einen Typ-String, um Daten mit den richtigen Typen zu binden (z. B. „s“ für Strings).
  4. Binden Sie die Array-Elemente mithilfe des Argument-Entpackens an die Anweisung Operator (...) in bind_param().
  5. Führen Sie die Anweisung aus und rufen Sie das Ergebnis ab Daten.

Beispielcode

Hier ist ein Beispiel, das den Ansatz früherer PHP-Versionen verwendet:

$array = ['Nashville', 'Knoxville'];
$in = str_repeat('?,', count($array) - 1) . '?';
$sql = "SELECT name FROM table WHERE city IN ($in)";
$stmt = $mysqli->prepare($sql); // prepare
$types = str_repeat('s', count($array)); // types
$stmt->bind_param($types, ...$array); // bind array at once
$stmt->execute();
$result = $stmt->get_result();
$data = $result->fetch_all(MYSQLI_ASSOC);

Wenn Sie diese Ansätze verstehen, Mit von MySQL vorbereiteten Anweisungen können Sie ein Array von Zeichenfolgen effizient an eine WHERE IN(?)-Klausel binden und so die erfolgreiche Ausführung Ihrer Abfragen sicherstellen.

Das obige ist der detaillierte Inhalt vonWie binde ich ein String-Array effizient an eine MySQL-WHERE-IN(?)-Klausel mithilfe der vorbereiteten mysqli-Anweisungen von PHP?. 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