Heim  >  Artikel  >  Datenbank  >  Wie übergebe ich ein Array von PDO-Parametern mit einer LIMIT-Klausel?

Wie übergebe ich ein Array von PDO-Parametern mit einer LIMIT-Klausel?

Barbara Streisand
Barbara StreisandOriginal
2024-10-24 01:29:29325Durchsuche

How to Pass an Array of PDO Parameters with a LIMIT Clause?

Übergabe eines Arrays von PDO-Parametern mit der LIMIT-Klausel

In PDO kann das Ausführen einer Abfrage mit einer LIMIT-Klausel unter Verwendung eines Arrays von Parametern eine Herausforderung sein.

Problem

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

Lösung

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!

Überlegungen zur Leistung

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!

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