开发者社区> 问答> 正文

如何在LIMIT子句中应用bindValue方法?

这是我的代码的快照:

$fetchPictures = $PDO->prepare("SELECT * FROM pictures WHERE album = :albumId ORDER BY id ASC LIMIT :skip, :max");

$fetchPictures->bindValue(':albumId', $_GET['albumid'], PDO::PARAM_INT);

if(isset($_GET['skip'])) { $fetchPictures->bindValue(':skip', trim($_GET['skip']), PDO::PARAM_INT);
} else { $fetchPictures->bindValue(':skip', 0, PDO::PARAM_INT);
}

$fetchPictures->bindValue(':max', $max, PDO::PARAM_INT); $fetchPictures->execute() or die(print_r($fetchPictures->errorInfo())); $pictures = $fetchPictures->fetchAll(PDO::FETCH_ASSOC); 我懂了

您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在第1行的“ 15”,“ 15”附近使用正确的语法

似乎PDO会将单引号添加到SQL代码的LIMIT部分的变量中。我查了一下,发现这个与我相关的错误:http : //bugs.php.net/bug.php?id=44639

那是我在看的吗?自2008年4月以来,此错误已被打开!同时,我们应该做什么?

我需要建立一些分页,并在发送sql语句之前确保数据干净,sql注入安全。

展开
收起
保持可爱mmm 2020-05-08 10:44:08 589 0
1 条回答
写回答
取消 提交回答
  • 我记得以前有这个问题。将值转换为整数,然后再将其传递给bind函数。我认为这解决了。

    $fetchPictures->bindValue(':skip', (int) trim($_GET['skip']), PDO::PARAM_INT);

    2020-05-08 10:44:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Lazy Join Optimizations Without Upfront Statistics 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载