Я не можу зрозуміти, чому я отримую SQLSTATE [HY093]: Недійсний номер параметра: кількість зв'язаних змінних не відповідає кількості маркерів повідомлення про помилку з наступним кодом:
$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());
}
Перші 6 знаків запитань пов'язані з вмістом myArr, а два останніх з лімітами. Це лише приклад, в реальному житті myArr може вмістити більше 100 значень і його розмір не є фіксованим.
Відповіді:
2 для відповіді № 1Коли ви зателефонуєте PDOStatement::execute()
з масивом параметрів він не буде використовувати параметри, зазначені в викликах PDOStatement::bindParam()
. Замість цього просто додайте $start
і $limit
змінна до кінця $myArr
і зателефонуйте $sql->execute()
.
try {
$sql = $pdo->prepare($req);
$myArr[] = $start
$myArr[] = $limit
$sql->execute($myArr);
}
Побачити це прокоментувати документацію PHP PDO.