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

标签 php mysql sql pdo 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 似乎在 SQL 代码的 LIMIT 部分中向我的变量添加了单引号。我查了一下,发现了这个我认为相关的错误: http://bugs.php.net/bug.php?id=44639

这就是我所看到的吗?这个bug从2008年4月就已经开放了! 在此期间我们应该做什么?

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

最佳答案

我记得以前也遇到过这个问题。在将值传递给绑定(bind)函数之前将其转换为整数。我认为这可以解决问题。

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

关于php - 如何在 LIMIT 子句中应用 bindValue 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40340212/

相关文章:

mysql - 用 mySQL 替换字符串的一部分 - 如何从名字字段中删除中间名首字母

mysql - cake php 如何做一个好的查询

sql查询以查找所有行的总和和重复数

php - PHP和MYSQLi插入

php - Laravel SQL 无法创建表

php - 弃用 : mysql_pconnect():

mysql - SQL - 在大表上选择最后一行的更快且不那么贪婪的方法是什么?

sql - ORACLE-如何根据特定字段中的特定数据创建临时字段

java - 在 JDBI dropwizard 中使用自定义 where 条件

php - 为什么我的数组值在我的数据库中被截断了?