Php pdo分页限制错误

Php pdo分页限制错误,php,pdo,pagination,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->

我有一个分页脚本,我试图将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)

我不知道怎么解决这个问题,有人能帮我吗?
谢谢

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);

在本教程中,第一个查询是
$count\u query=$db->prepare('selectnull FROM images where album\u id=?')
这在教程中有效,但在这里不起作用,我认为这给出了负值。
我将其更改为
$count\u query=$db->prepare('SELECT*FROM image where album\u id=?')
错误消失了。现在出现了其他错误,希望我能解决。

感谢您帮助我解决此错误。

根据您的错误,您对术语
DESCLIMIT
有问题,这不是正确的SQL,我相信您选择的是
DESCLIMIT
。只需在prepare语句末尾的
DESC
后面加一个空格即可。我确实按image_id DESC.$limit)进行了订购;但这并没有改变。“它使限制消失。它应该像
orderbyimage\u id DESC”前面的空格$限制)。在
下订单之前的一切都应该是好的。如果我像你所说的那样移动';要在第1行使用接近“-2,2”的正确语法,在
限制中不能有负值。
LIMIT
中的第一个数字告诉SQL从哪里开始,第二个数字告诉SQL要返回多少行。遗憾的是,没有区别。错误的结尾现在看起来是这样的;对于在第1行使用近'-2,2'的正确语法