我遇到一个问题,PDO使用引号封装int值,然后使查询失败。
这是代码(使用包装函数)
$newest = query("SELECT id, body, upvotes, downvotes
FROM suggestions ORDER BY timestamp DESC LIMIT :min, :max",
array(
':min' => $min,
':max' => $max
)
);
这是导致错误的错误查询(注意LIMIT
值周围的引号)
SELECT id, body, upvotes, downvotes FROM suggestions ORDER BY timestamp DESC LIMIT '0' , '50'
我传递了一系列值:
array(
':min' => $min,
':max' => $max
)
它们都是INT,从我在互联网上读到的内容,PDO应该自动找到它并在绑定它们时使用PDO::PARAM_INT
。问题是它实际上并没有这样做,因为我传递它们的唯一方法是通过一个数组,我想问一下是否有办法迫使它们PDO::PARAM_INT
而不必使用{{1 }}
提前致谢。
答案 0 :(得分:1)
如果您使用包装器而无法使用bindParam,则可以执行以下操作:
$min=(int)$min;
$max=(int)$max;
query("SELECT id, body, upvotes, downvotes
FROM suggestions ORDER BY timestamp DESC LIMIT $min, $max");
这不是最好的主意。如果你想保持标准,你应该改进你的包装来处理这种情况。
喜欢在你的包装器中添加第三个参数
function query($q,$paramArray,$bindParamArray) {}
所以你也可以有效地使用bindParam