この迷惑なエラーが表示されます。エラーが発生する理由はわかっていますが、一生解決策を見つけることはできません。
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);
クエリにプレースホルダーが含まれています ( :placeholder
)。しかし、これらの LIMIT プレースホルダーを追加するには、手動の方法 ( bindValue
) を使用する必要があります。そうしないと、エンジンがプレースホルダーを文字列に変換してしまうからです。
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
手動でバインドする最後の 2 つの LIMIT を除いて、すべてのプレースホルダー値は $criteria にありbindValue()
ます。