这是我的代码的快照:

$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服务器版本
  在'15',15'附近使用的正确语法
  1行


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

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

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

最佳答案

我记得以前有这个问题。将值转换为整数,然后再将其传递给bind函数。我认为这解决了。

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

07-28 13:19