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.
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!