Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann man ein String-Array effizient an die IN-Klausel einer von MySQLi vorbereiteten Anweisung binden?

Wie kann man ein String-Array effizient an die IN-Klausel einer von MySQLi vorbereiteten Anweisung binden?

Mary-Kate Olsen
Freigeben: 2024-12-24 15:50:11
Original
527 Leute haben es durchsucht

How to Efficiently Bind an Array of Strings to a MySQLi Prepared Statement's IN Clause?

Binden eines Arrays von Strings in von MySQLi vorbereiteten Anweisungen für eine IN-Klausel

Im Bereich der Datenbankinteraktionen kann es Situationen geben, in denen Sie erfordern die Bindung eines Arrays von Zeichenfolgenwerten an die WHERE IN (?)-Klausel innerhalb einer MySQLi-vorbereiteten Anweisung. Dieser Artikel befasst sich mit den zugrunde liegenden Prinzipien und bietet elegante Lösungen, wobei der Schwerpunkt insbesondere auf den PHP-Versionen 8.2, 8.1 und früheren Versionen liegt.

PHP 8.2: Ein vereinfachter Ansatz

Die Die in PHP 8.2 eingeführte Funktionexecute_query() rationalisiert den Prozess der Ausführung vorbereiteter Anweisungen mit datengefüllten Arrays. Zum Beispiel:

$sql = "SELECT name FROM table WHERE city IN (?,?)";
$array = ["Nashville", "Knoxville"];
$result = $mysqli->execute_query($sql, $array);
Nach dem Login kopieren

Für Fälle mit dynamischer Platzhalterzählung können Sie str_repeat() verwenden, um die Platzhalter dynamisch zu erstellen:

$array = ["Nashville", "Knoxville"];
$parameters = str_repeat("?,", count($array) - 1) . "?";
$sql = "SELECT name FROM table WHERE city IN ($parameters)";
$result = $mysqli->execute_query($sql, $array);
Nach dem Login kopieren

PHP 8.1: Direct Array Execution

In PHP 8.1 und höher können Sie eine vorbereitete Anweisung direkt mit einem Array ausführen und dabei das entfernen Notwendigkeit einer expliziten Bindung:

$sql = "SELECT name FROM table WHERE city IN (?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->execute(["Nashville", "Knoxville"]);
$result = $stmt->get_result();
Nach dem Login kopieren

Frühere Versionen: Umfassen der Komplexität

Für Versionen vor PHP 8.1 ist das Verfahren etwas komplizierter:

  • Erstellen Sie eine Platzhalterzeichenfolge mit der gleichen Anzahl an Fragezeichen wie Elemente im Array mit str_repeat().
  • Fügen Sie diese Platzhalterzeichenfolge zur Abfrage hinzu.
  • Bereiten Sie die Abfrage auf herkömmliche Weise vor.
  • Erstellen Sie eine Typzeichenfolge für bind_param() mit str_repeat(), normalerweise mit „s“ für Strings.
  • Verwenden Sie den Argument-Entpackungsoperator (...), um die Array-Werte zu binden Masse.
  • Führen Sie die Abfrage aus und rufen Sie die Ergebnisse ab.

Beispiel:

$array = ["Nashville", "Knoxville"];
$in = str_repeat("?,", count($array) - 1) . "?";
$sql = "SELECT name FROM table WHERE city IN ($in)";
$stmt = $mysqli->prepare($sql);
$types = str_repeat("s", count($array));
$stmt->bind_param($types, ...$array);
$stmt->execute();
$result = $stmt->get_result();
Nach dem Login kopieren

Dieser Code ist zwar etwas ausführlicher, bietet aber eine prägnante Lösung im Vergleich zu alternativen Ansätzen.

Abschließend: Binden eines Arrays von Zeichenfolgen an eine IN-Klausel in MySQLi-vorbereiteten Anweisungen umfasst mehrere Methoden, die auf verschiedene PHP-Versionen zugeschnitten sind. Durch die Nutzung der in diesem Artikel beschriebenen Techniken können Sie diese Abfragen effektiv in Ihren Datenbankinteraktionen ausführen.

Das obige ist der detaillierte Inhalt vonWie kann man ein String-Array effizient an die IN-Klausel einer von MySQLi vorbereiteten Anweisung binden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage