您的 SQL 查询无效。
你有:
$sql = 'SELECT * FROM journal where LIMIT :limit OFFSET :offset';
正如@Jessie Jackson 指出的那样,为什么“哪里”部分是空的?
以下有效”
$sql = 'SELECT * FROM journal LIMIT :limit OFFSET :offset';
我不明白为什么你会得到你得到的错误:
PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: 绑定变量的数量与标记的数量不匹配
无效 where 语句的错误应该如下所示:
PDOException: SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'LIMIT 附近使用的正确语法?抵消 ?'在第 1 行的 /path/to/stackoverflow/tmp/pdo.php 第 18 行
绝对可以肯定,以下测试可以正常工作:
<?php
$pdo = new PDO(
'mysql:dbname=test',
'yser',
'pass'
);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$limit = 0;
$offset = 0;
$sql = 'SELECT * FROM journal LIMIT :limit OFFSET :offset';
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$res = $stmt->execute();
var_dump($res);
var_dump($stmt->fetchAll());
那么,为什么您会收到该错误与$offset=0 无关。
更新
可能的原因是如果您将PDO::ATTR_EMULATE_PREPARES 设置为true,请阅读Parametrized PDO query and LIMIT clause - not working。