/ / PDO: Недійсний номер параметра: кількість зв'язаних змінних не відповідає кількості маркерів

PDO: Недійсний номер параметра: кількість зв'язаних змінних не відповідає кількості маркерів - mysql, pdo, параметри

Я не можу зрозуміти, чому я отримую 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.