我有以下内容:
public function getAll($limit = 100)
{
//if ($thread != 0) { $threadq = "WHERE threadId=$threadId"; }
$query = <<<EOF
SELECT
x.*
FROM x
ORDER BY dater DESC
LIMIT ?
EOF;
return self::$db->fetchAll($query, $limit);
}
似乎它将LIMIT x
转换为LIMIT 'x'
,因此MySQL查询解析器出错并抱怨。
然而,LIMIT $limit
正常工作
为什么这不起作用?还有另一种方法吗?
答案 0 :(得分:4)
替换参数必须在数组内部,即使只有单个:
return self::$db->fetchAll($query, array($limit));
对于查询的限制部分,您不需要使用?替换通配符!
答案 1 :(得分:2)
我会发疯,建议你保持简单并使用Zend_Db_Select。这似乎是一个简单的查询。
此演示使用默认的ZF DbTable作为适配器(我可以轻松使用Zend_Db_Table::getDefaultAdapter();
),但它可以适用于几乎任何类型的查询:
<?php
class Application_Model_DbTable_User extends Zend_Db_Table_Abstract
{
protected $_name = 'user';
protected $_primary = 'id';
public function getAll($limit = 100)
{
$select = $this->select();//This is the adapter for this table and implies SELECT * FROM user
$select->order('name', 'DESC') //can also pass an array of columns
->limit($limit);//limit has a second arg for offset
return $this->fetchAll($select);//returns a rowset object, if an array is required append ->toArray to the fetchall().
}
}