Heim >Backend-Entwicklung >PHP-Tutorial >Wie binde ich ein String-Array korrekt an eine von MySQLi vorbereitete Anweisung?

Wie binde ich ein String-Array korrekt an eine von MySQLi vorbereitete Anweisung?

Susan Sarandon
Susan SarandonOriginal
2024-12-28 10:47:10975Durchsuche

How to Correctly Bind an Array of Strings to a MySQLi Prepared Statement?

Binden eines Arrays von Strings mit einer vorbereiteten mysqi-Anweisung

Bei der Arbeit mit MySQL ist es oft notwendig, ein Array von Werten an ein zu binden WHERE IN-Klausel mit einer vorbereiteten Anweisung. Obwohl diese Aufgabe unkompliziert erscheinen mag, gibt es einige potenzielle Fallstricke, die zu Fehlern führen können.

In diesem Artikel untersuchen wir den richtigen Ansatz zum Binden eines Arrays von Zeichenfolgen mithilfe vorbereiteter MySQL-Anweisungen. Außerdem erläutern wir die erforderlichen Schritte ausführlich und besprechen eine mögliche Lösung.

Was läuft schief?

Das in der Frage bereitgestellte Codebeispiel versucht fälschlicherweise, dies zu tun Binden Sie ein Array von Städten mit bind_param an eine vorbereitete Anweisung. Allerdings erwartet bind_param Skalarwerte (z. B. Strings, Ganzzahlen usw.) als Argumente. Der Versuch, ein Array direkt zu binden, führt zu einem Fehler.

Der richtige Ansatz

Um ein Array von Zeichenfolgen erfolgreich an eine vorbereitete Anweisung zu binden, können wir Folgendes verwenden Schritte:

  1. Erstellen Sie eine Zeichenfolge mit Platzhaltern: Erstellen Sie zunächst eine Zeichenfolge bestehend aus den entsprechenden Anzahl der Fragezeichen (?), um die Platzhalter für die Array-Elemente darzustellen.
  2. Fügen Sie die Platzhalterzeichenfolge in die Abfrage ein: Ersetzen Sie die WHERE IN-Klausel durch die Zeichenfolge der Platzhalter.
  3. Bereiten Sie die Anweisung vor und binden Sie sie: Bereiten Sie die geänderte Abfrage vor und binden Sie die Array-Elemente mit den richtigen Typspezifizierern (z. B. 's' für Zeichenfolgen).
  4. Führen Sie die Abfrage aus:Führen Sie die vorbereitete Anweisung aus, um die Ergebnisse abzurufen.

Beispielcode

Hier ist ein Beispiel für den richtigen Code:

$mysqli = new mysqli("localhost", "root", "root", "db");
if(!$mysqli || $mysqli->connect_errno) { return; }

$cities = explode(",", $_GET['cities']);
$in = str_repeat('?,', count($cities) - 1) . '?';
$query_str = "SELECT name FROM table WHERE city IN ($in)";

$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str)) {
    $types = str_repeat('s', count($cities));
    $query_prepared->bind_param($types, ...$cities);
    $query_prepared->execute();
}

Hier Beispielsweise erstellen wir zunächst mit str_repeat eine Zeichenfolge aus Platzhaltern. Diesen Platzhalterstring fügen wir dann in die Abfrage ein und bereiten die Anweisung vor. Beachten Sie, wie wir die einzelnen Elemente des Cities-Arrays mit ...$cities binden und den Datentyp mit str_repeat('s', count($cities)) angeben.

Indem wir diese Schritte befolgen, können wir erfolgreich sein Binden Sie ein Array von Zeichenfolgen an eine von MySQL vorbereitete Anweisung und führen Sie die Abfrage wie vorgesehen aus.

Das obige ist der detaillierte Inhalt vonWie binde ich ein String-Array korrekt an eine von MySQLi vorbereitete Anweisung?. 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