【问题标题】:pdo pagination limit errorpdo分页限制错误
【发布时间】:2013-11-19 06:00:07
【问题描述】:

我有一个分页脚本,我正在尝试将 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());
} 

我在 google 上搜索了解决方案,但我的 pdo 知识不足以正确使用它。我遇到了类似的错误; SQLSTATE[HY093]: Invalid parameter number: 绑定变量数与token数不匹配,因为$query->bindParam(':limit', $limit, PDO::PARAM_INT);

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

【问题讨论】:

  • 根据您的错误,您对术语DESCLIMIT 有问题,这不是正确的SQL,我相信您要使用DESC LIMIT。只需在 DESC 之后的准备语句末尾添加一个空格即可。
  • 我做了 ORDER BY image_id DESC' .$limit);但它没有改变。 ' 前的空格使限制消失。
  • 它应该看起来像ORDER BY image_id DESC ' . $limit);ORDER_BY 之前的一切都应该没问题。
  • 如果我像你说的那样移动',错误的结尾看起来像这样;在第 1 行的“-2,2”附近使用正确的语法
  • LIMIT 中不能有负值。 LIMIT 中的第一个数字告诉 SQL 从哪里开始,第二个数字告诉 SQL 你想要返回多少行。

标签: php pdo pagination


【解决方案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 行的“-2,2”附近使用正确的语法
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2015-01-27
    • 2012-01-11
    • 1970-01-01
    • 2011-04-29
    • 2015-08-12
    相关资源
    最近更新 更多