Ich kann nicht herausfinden, warum ich das bekomme SQLSTATE [HY093]: Ungültige Parameternummer: Die Anzahl der gebundenen Variablen stimmt nicht mit der Anzahl der Token überein Fehlermeldung mit folgendem Code:
$myArr = array(283908,283951,284024,284064,284076,284099);
$num = count($myArr);
$req = "select * from MyTable where Id in (?,?,?,?,?,?) limit ?,?";
$start = 0;
$limit = 3;
try {
$sql = $pdo->prepare($req);
$sql->bindParam($num+1, $start, PDO::PARAM_INT);
$sql->bindParam($num+2, $limit, PDO::PARAM_INT);
$sql->execute($myArr);
}
catch(PDOException $e) {
pdo_error($e->getMessage());
}
Die ersten 6 Fragezeichen sind mit myArr-Inhalten und die letzten 2 mit Begrenzungen verbunden. Dies ist nur ein Beispiel. In der Praxis kann myArr mehr als 100 Werte enthalten und seine Größe ist nicht festgelegt.
Antworten:
2 für die Antwort № 1Wenn du anrufst PDOStatement::execute()
Bei einem Array von Parametern werden die in Aufrufen von angegebenen Parameter nicht verwendet PDOStatement::bindParam()
. Hängen Sie stattdessen einfach das an $start
und $limit
variabel bis zum Ende von $myArr
und Ruf an $sql->execute()
.
try {
$sql = $pdo->prepare($req);
$myArr[] = $start
$myArr[] = $limit
$sql->execute($myArr);
}
Sehen Dies Kommentar zur PHP PDO Dokumentation.