/ / pdo Zählen der hartcodierten IN-Klausel als Parameter, die benötigt werden - php, pdo

pdo zählt die hartcodierte IN-Klausel, wenn Parameter benötigt werden - php, pdo

Überprüfen Sie Folgendes:

$idPlaceholders = implode(",", array_fill(0, count($ids), "?"));
$query = $db->prepare("
SELECT *
FROM sometable
WHERE
id IN(" . $idPlaceholders . ")
AND status IN ("open", "reopened")
");
$query->execute($ids);

Wenn ich es ausführe, erhalte ich folgende Fehlermeldung:

PHP-Warnung: PDOStatement :: execute (): SQLSTATE [HY093]: Ungültige Parameternummer: Anzahl der gebundenen Variablen stimmt nicht mit der Anzahl der Token überein

Wenn ich das entferne AND status IN (...) Klausel, es läuft gut. Mache ich etwas falsch? Ich hatte den Eindruck, dass fest codierte Werte werden vom PDO ignoriert.

Beachten Sie, ich habe dreifach überprüft und die Anzahl der "?" Passen Sie die Anzahl der IDs an.

Das $ids array ist ein indiziertes Array (hier ist der var_dump):

array 3
0 => int 23
1 => int 45
2 => int 67

Die gerenderte Abfrage sieht folgendermaßen aus:

SELECT *
FROM mytable
WHERE
id IN (?,?,?)
AND status IN ("open", "reopened")

Antworten:

0 für die Antwort № 1

Beantworten Sie diese Frage, um sie aus den offenen Fragenlisten zu entfernen. Nicht löschen, da ich nicht gebannt werden möchte.

Die von mir verwendete Anwendung erweitert PDO und fügt eine Funktion zum automatischen Erweitern eines Platzhalters innerhalb einer IN-Klausel hinzu (z. IN (:ids)). Es stellt sich heraus, dass es kaputt geht, wenn Sie es so machen, wie ich es in meiner Frage beschrieben habe.


-2 für die Antwort № 2

Kannst du versuchen, ob das funktioniert?

$idPlaceholders = implode(",", array_fill(0, count($ids), "?"));
$query = $db->prepare("
SELECT *
FROM sometable
WHERE
id IN(" . $idPlaceholders . ")
AND status IN (?, ?)
");
$ids[]="open";
$ids[]="reopened";
$query->execute($ids);