Zend Framework选择where子句占位符减慢进程

时间:2013-09-06 11:55:54

标签: php zend-framework placeholder

我正在使用Zend Framework 1.12.3,我注意到使用'?' where子句中的占位符会减慢进程:

$query = $this->getDbTable()->select()
    ->from($this->getDbTable(), array('id'))
    ->where('id = ?', $id);

慢得多:

$query = $this->getDbTable()->select()
    ->from($this->getDbTable(), array('id'))
    ->where('id =' . $id);

以下是getDbTable和setDbTable方法,而$ _dbTable是受保护的属性:

public function setDbTable($dbTable)
{
    if (is_string($dbTable)) {
        $dbTable = new $dbTable();
    }
    if (!$dbTable instanceof Zend_Db_Table_Abstract) {
        throw new Exception('Invalid table data gateway provided');
    }
    $this->_dbTable = $dbTable;
    return $this;
}

public function getDbTable()
{
    if (null === $this->_dbTable) {
        $this->setDbTable('V1_Model_DbTable_Users');
    }
    return $this->_dbTable;
}

和V1_Model_DbTable_Users类:

class V1_Model_DbTable_Users extends Zend_Db_Table_Abstract
{
    protected $_name = 'users'; 
}

有没有人遇到同样的问题?你有什么解决办法?感谢

2 个答案:

答案 0 :(得分:1)

请记住,您的第一个示例是使用该功能引用转义输入,其中第二个示例与在原始SQL中编写它相同。

答案 1 :(得分:0)

在你有这种行为之前,你不应该考虑缓慢的事情。这在我看来是一个意见。对于时间差异很重要,您必须在其架构级别以上存在问题。 许多人花时间试图找到一个不存在的问题,因为应该改进自己的代码。

不要这么认真。这只是你应该认为具有建设性的东西。