Heim >Datenbank >MySQL-Tutorial >Wie übergebe ich ein Array von PDO-Parametern mit einer LIMIT-Klausel?
In PDO kann das Ausführen einer Abfrage mit einer LIMIT-Klausel unter Verwendung eines Arrays von Parametern eine Herausforderung sein.
Bedenken Sie den folgenden Code:
$sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%') LIMIT :limit1, :limit2"; $stmt = $pdo->prepare($sql); $stmt->execute($array); // Doesn't work
Während es aus Bequemlichkeitsgründen wünschenswert ist, Array-Eingaben zu verwenden, funktionieren die Parameter :limit1 und :limit2 nicht, es sei denn, sie werden einzeln gebunden :
$stmt->bindParam(':limit1', $limit1, PDO::PARAM_INT); $stmt->bindParam(':limit2', $limit2, PDO::PARAM_INT); $stmt->execute(); // Still doesn't work
Das Problem liegt in der PDO-Standardeinstellung von PDO::ATTR_EMULATE_PREPARES auf true. Diese Einstellung bewirkt, dass PHP vorbereitete Anweisungen emuliert, anstatt native MySQL-vorbereitete Anweisungen zu verwenden, was die ordnungsgemäße Bindung von LIMIT-Parametern verhindert.
Um dieses Problem zu beheben, deaktivieren Sie die Emulation, indem Sie das Attribut auf „false“ setzen:
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Sobald die Emulation deaktiviert ist, kann die Array-Eingabe verwendet werden, um die Abfrage korrekt auszuführen:
$stmt = $pdo->prepare($sql); $stmt->execute($array); // Works!
Beachten Sie, dass das Deaktivieren der Emulation als native Emulation Auswirkungen auf die Leistung haben kann Vorbereitete Anweisungen sind in bestimmten Szenarien effizienter. Für Abfragen, die dynamische LIMIT-Klauseln erfordern, ist dies jedoch die zuverlässigste Lösung.
Das obige ist der detaillierte Inhalt vonWie übergebe ich ein Array von PDO-Parametern mit einer LIMIT-Klausel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!