pdo分页限制错误

时间:2013-11-18 21:12:03

标签: php pdo pagination

我有一个分页脚本,我正在尝试将mysql数据库更改为pdo数据库,但是我收到此错误; SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“DESCLIMIT -2,2”附近使用正确的语法

代码中给我带来麻烦的部分是;

$limit = "LIMIT ".($page-1)*$perPage.",$perPage";
//$offset = ($page - 1)  * $perPage;
$query = $db->prepare('SELECT image_id FROM images WHERE album_id= ? ORDER BY image_id DESC'.$limit);
$query->bindValue(1, $album_id);
//$query->bindParam(':limit', $limit, PDO::PARAM_INT);
try{
$query->execute();
}catch (PDOException $e){
die($e->getMessage());
} 

我在谷歌搜索了解决方案,但我的pdo知识不够好,无法正确使用它。我得到了错误; SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配,因为$query->bindParam(':limit', $limit, PDO::PARAM_INT);

我不知道如何解决这个问题,有人可以帮帮我吗? 谢谢......

2 个答案:

答案 0 :(得分:1)

似乎mysql不喜欢负偏移。你可以这样做

$limit = ($page-1)*$perPage;
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
$sql  = 'SELECT image_id FROM images WHERE album_id=? ORDER BY image_id DESC LIMIT ?,?';
$stmt = $pdo->prepare($sql);
$stmt->execute([$album_id,$limit,$perPage]);
$ids  = $stmt->fetchAll(PDO::FETCH_COLUMN);

答案 1 :(得分:-1)

在教程中,第一个查询是$count_query = $db->prepare('SELECT NULL FROM images where album_id= ?'); 这在教程中有效,但在这里没有,我认为这给了负值。 我将其更改为$count_query = $db->prepare('SELECT * FROM images where album_id= ?'); 而错误消失了。现在出现了其他错误,希望我能解决这个问题。 谢谢你帮我解决了这个错误。