나는 이 성가신 오류를 겪고 있고, 내가 왜 그런 실수를 하는지 알기는 하지만, 아무리 생각해도 그것에 대한 해결책을 찾을 수 있다.
if ($limit) {
$sth->bindValue(':page', $page - 1, PDO::PARAM_INT);
$sth->bindValue(':entries_per_page', $page * $entries_per_page, PDO::PARAM_INT);
}
$sth->execute($criteria);
쿼리에 자리 표시자(': 자리 표시자')가 있습니다. 그러나 이러한 LIMIT 자리 표시자를 추가하려면 수동 방법('bind Value')을 사용해야 합니다. 그렇지 않으면 엔진이 자리 표시자를 문자열로 변환하기 때문입니다.
I'Invalid number of parameters(인정되지 않은 파라미터 수) 오류가 발생하지 않으므로 모든 자리 표시자가 올바르게 바인딩되었습니다.
쿼리:
SELECT `articles`.*, `regional_municipalities`.`name` AS `regional_municipality_name`,
`_atc_codes`.`code` AS `atc_code`, `_atc_codes`.`name` AS `substance`
FROM `articles`
LEFT JOIN `_atc_codes`
ON (`_atc_codes`.`id` = `articles`.`atc_code`)
JOIN `regional_municipalities`
ON (`regional_municipalities`.`id` = `articles`.`regional_municipality`)
WHERE TRUE AND `articles`.`strength` = :strength
GROUP BY `articles`.`id`
ORDER BY `articles`.`id`
LIMIT :page, :entries_per_page
마지막 두 LIMIT를 제외하고 모든 자리 표시자 값은 $criteria에 있습니다. 이 값은 수동으로 'bindValue()로 바인딩합니다.
이 예외는 경우에도 나타납니다 당신을 실행하려고 하쿼리으로 자리 표시자를 대신에 준비**는 문 등
$stmt = $db->query('SELECT * FROM tbl WHERE ID > ?');
대
$stmt = $db->prepare('SELECT * FROM tbl WHERE ID > ?');
매뉴얼에서:
'public bool PDOS 문::execute([array $input_parameters])'
준비된 문장을 실행합니다. 작성된 명세서가 포함된 경우 파라미터 마커, 둘 중 하나:
PDOS 문::bindParam()을 호출하여 PHP 변수를 매개 변수 마커에 바인딩합니다. 바인딩된 변수는 값을 입력으로 전달하며 연결된 파라미터의 출력 값(있는 경우)을 수신합니다. 마커
또는 입력 전용 매개변수 값의 배열을 전달합니다.
방법을 골라야 돼. 둘 다 섞을 수 없습니다.