Übergabe von Array-Parametern und Verwendung der LIMIT-Klausel mit PDO
Bei der Arbeit mit Datenbankabfragen kann es von Vorteil sein, ein Array von Parametern an zu übergeben eine PDO-Anweisung unter Verwendung der LIMIT-Klausel. Dies kann jedoch eine Herausforderung darstellen, wenn die bindParam-Methode zum Festlegen einzelner Parameter verwendet wird.
Das Dilemma
Die Herausforderung entsteht, weil die LIMIT-Klausel die Bindung bestimmter numerischer Werte erfordert , während die Ausführungsmethode ein Array benannter Parameter erwartet. Diese Inkompatibilität verhindert, dass beide Ansätze gleichzeitig verwendet werden können.
Überwindung des Problems
Die Lösung liegt in der Deaktivierung der Standardeinstellung von PDO::ATTR_EMULATE_PREPARES. Wenn diese Option aktiviert ist, generiert PDO intern dynamisches SQL und setzt Werte in Anführungszeichen, wodurch im Wesentlichen vorbereitete Anweisungen emuliert werden. Dieses Standardverhalten beeinträchtigt jedoch die Übergabe benannter Parameter.
Deaktivieren emulierter Vorbereitungen
Indem Sie PDO::ATTR_EMULATE_PREPARES mithilfe der setAttribute-Methode auf „false“ setzen, wird das Standardverhalten deaktiviert . Dadurch kann PDO tatsächlich vorbereitete Anweisungen verwenden und so die Bindung benannter Parameter ermöglichen, während weiterhin die LIMIT-Klausel verwendet wird.
Beispielverwendung
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%') LIMIT :limit1, :limit2";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(':id' => $id, ':limit1' => $limit1, ':limit2' => $limit2)); // Works!
Überlegungen zur Leistung
Emulierte Vorbereitungen werden standardmäßig für MySQL verwendet, um die Leistung zu verbessern. Das Deaktivieren emulierter Vorbereitungen kann die Leistung leicht beeinträchtigen, ermöglicht jedoch eine größere Flexibilität bei der Parameterbindung.
Zusätzliche Ressourcen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen:
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3