为什么 ?不适用于Zend_Db的LIMIT

时间:2012-08-09 18:11:13

标签: php mysql zend-framework zend-db

我有以下内容:

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正常工作

为什么这不起作用?还有另一种方法吗?

2 个答案:

答案 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().
}   
}