我正在尝试使用doctrine运行本机SQL查询,并且遇到问题时引用了我查询的LIMIT
部分的数字。
$offset = $pageNumber * self::$limit;
$sql = "
SELECT * FROM devices LIMIT :offset, :limit
";
$stmt = self::getEntityManager()->getConnection()->prepare($sql);
$stmt->bindValue("offset", $offset);
$stmt->bindValue("limit", self::$limit);
$stmt->execute();
$result = $stmt->fetchAll();
生成:
SELECT * FROM devices LIMIT '0', '5000'
哪个无效。 我有点难以理解如何改变它以产生 :
SELECT * FROM devices LIMIT 0, 5000
我引用了data-retrieval-and-manipulation,其中有一个关于quote()
函数的部分,但它对细节很羞怯。
答案 0 :(得分:2)
尝试:
$stmt->bindValue("offset", $offset, PDO::PARAM_INT);
请参阅来源here:
28: class MysqliStatement implements \IteratorAggregate, Statement
29: {
30: protected static $_paramTypeMap = array(
31: PDO::PARAM_STR => 's',
32: PDO::PARAM_BOOL => 'i',
33: PDO::PARAM_NULL => 's',
34: PDO::PARAM_INT => 'i',
35: PDO::PARAM_LOB => 's' // TODO Support LOB bigger then max package size.
36: );