Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich vorbereitete Anweisungen mit Array-Filtern in der MySQL-Klausel „WHERE ... IN()' effizient verwenden?

Wie kann ich vorbereitete Anweisungen mit Array-Filtern in der MySQL-Klausel „WHERE ... IN()' effizient verwenden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-16 16:33:11759Durchsuche

How Can I Efficiently Use Prepared Statements with Array Filters in MySQL's `WHERE ... IN()` Clause?

Vorbereitete Anweisung mit Array-Filter: Abfrage „WHERE .. IN(..)“

Problem

Betrachten Sie die folgende Abfrage, die zeilenbasiert abruft auf bestimmten IDs:

SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;

Gegeben ein Array von abzurufenden IDs ($ids), Aus Effizienzgründen wird empfohlen, vorbereitete Anweisungen zu verwenden. Die Verwendung einer Schleife zum Durchlaufen des Arrays und zum separaten Binden jeder ID erfordert jedoch eine anschließende manuelle Sortierung der Ergebnisse.

Lösung

Um diesen Prozess zu vereinfachen und die MySQL-Reihenfolge beizubehalten, gibt es einen alternativen Ansatz:

$ids = array(1,5,18,25);

// Construct a placeholder string containing ?,?,? etc.
$clause = implode(',', array_fill(0, count($ids), '?'));

$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id` IN (' . $clause . ') ORDER BY `name`;');

// Bind all IDs to the placeholder string using call_user_func_array
call_user_func_array(array($stmt, 'bind_param'), $ids);
$stmt->execute();

// Iterate over the results

Diese Methode bindet alle IDs in einem Aufruf an die Platzhalterzeichenfolge, sodass MySQL die Filterung und Sortierung effizient durchführen kann.

Das obige ist der detaillierte Inhalt vonWie kann ich vorbereitete Anweisungen mit Array-Filtern in der MySQL-Klausel „WHERE ... IN()' effizient verwenden?. 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