Heim >Datenbank >MySQL-Tutorial >Wie verwende ich MySQLi-vorbereitete Anweisungen mit dem IN-Operator effektiv?

Wie verwende ich MySQLi-vorbereitete Anweisungen mit dem IN-Operator effektiv?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-27 00:12:10387Durchsuche

How to Use MySQLi Prepared Statements with the IN Operator Effectively?

Vorbereitete MySQLi-Anweisungen mit dem IN-Operator

Vorbereitete Anweisungen bieten gegenüber herkömmlichen Abfragen mehr Sicherheit und Leistung, indem sie es Ihnen ermöglichen, Parameterwerte separat anzugeben die Aussage selbst. Wenn Sie jedoch vorbereitete Anweisungen mit dem IN-Operator verwenden, können Probleme auftreten, wenn Ihr Ansatz nicht korrekt ist.

Das Problem

Wie eingangs erwähnt Abfrage führt das Binden einer durch Kommas getrennten Zeichenfolge von Werten an die vorbereitete Anweisung mithilfe von bind_param('s', $in_statement) nicht zu Ergebnissen, obwohl die Daten in der vorbereiteten Anweisung vorhanden sind Datenbank.

Die Lösung

Die Lösung liegt darin, jeden Parameterwert einzeln zu behandeln:

  1. Erstellen Sie ein Array mit nummerierten Schlüsseln und übergeben Sie Werte explizit per Referenz darauf verweisen.
  2. Zählen Sie die Anzahl der Parameter und erstellen Sie eine Zeichenfolge mit der entsprechenden Anzahl von i Zeichen, die ihre Daten darstellt Typ.
  3. Kombinieren Sie die Datentypzeichenfolge mit einem Array von Fragezeichen, um die Parameterzeichenfolge für die vorbereitete Anweisung zu bilden.
  4. Verschieben Sie die Datentypzeichenfolge in das Array von Parameterwerten.
  5. Verwenden Sie call_user_func_array, um das Array von Parameterwerten an das vorbereitete zu binden Anweisung.

Beispielcode

<?php
$lastnames = ['braun', 'piorkowski', 'mason', 'nash'];
$arParams = [];

foreach ($lastnames as $key => $value) {
    $arParams[] = &$lastnames[$key];
}

$count_params = count($arParams);
$int = str_repeat('i', $count_params);
array_unshift($arParams, $int);

$q = array_fill(0, $count_params, '?');
$params = implode(',', $q);

$data_res = $mysqli->prepare("SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN ({$params})");
call_user_func_array([$data_res, 'bind_param'], $arParams);
$data_res->execute();
$result = $data_res->get_result();

while ($data = $result->fetch_array(MYSQLI_ASSOC)) {
    // Your code here...
}

$result->free();
$data_res->close();

Mit diesem Ansatz können Sie mithilfe des IN-Operators mehrere Werte ordnungsgemäß an die vorbereitete Anweisung binden.

Das obige ist der detaillierte Inhalt vonWie verwende ich MySQLi-vorbereitete Anweisungen mit dem IN-Operator effektiv?. 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