php – 如何在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);

我得到

You have an error in your SQL syntax;
check the manual that corresponds to
your MySQL server version for the
right syntax to use near ”15′, 15′ at
line 1

看来PDO正在为我的变量添加单引号在LIMIT部分的SQL代码。我看了它,我发现这个bug,我认为是相关的:
http://bugs.php.net/bug.php?id=44639

这是我在看什么?此错误自2008年4月以来已打开!
在此期间我们应该做什么?

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

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

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

转载注明原文:php – 如何在LIMIT子句中应用bindValue方法? - 代码日志