我已经有了一个大概很简单的问题,我无法找到Zend框架手册令人满意的(主观上看到的)答案或其他地方...

有这么多的方法我怎么能我的PHP变量交给我的SQL查询,我失去了概述,大概是我缺乏对一般报价一定的了解。

准备语句

$sql =  "SELECT this, that
        FROM table
        WHERE id = ? AND restriction = ?";

$stmt = $this->_db->query($sql, array($myId, $myValue)); 
$result = $stmt->fetchAll();

据我所知,这种解决方案我不需要引用任何东西,因为数据库处理这对我来说。

在API查询和的Zend_Db_Table对象_Row

$用户=新用户();

a) $users->fetchRow('userID = ' . $userID);  
b) $users->fetchRow('userID = ' . $users->getAdapter()->quote($userID, 'INTEGER'));  
c) $users->fetchRow('userID = ?', $userID);  
d) $users->fetchRow('userID = ?', $users->getAdapter()->quote($userID, 'INTEGER'));  

问题

据我所知,)也不行,因为它不是在所有的报价。但对于其他版本的,什么是最好的?为C)被当做一份声明中,并自动报价或做我需要使用d)当我使用?标识符

有帮助吗?

解决方案

声明::该信息为这个答案的原始发布日期有效。 ZF经常改变,这些信息可能变得过时与将来的版本,然而,这仍将备案不变。

如果你传递一个字符串fetchRow()的子类(你正在做)的Zend_Db_Table_Abstract方法,它将被视为where实例的Zend_Db_Table_Select一部分。

换句话说,在内部,Zend_Db_Table确实这样:

if (!($where instanceof Zend_Db_Table_Select)) {
    $select = $this->select();

    if ($where !== null) {
        $this->_where($select, $where);
    }

所以...

a) $users->fetchRow('userID = ' . $userID);  

是不是所有报价。

b) $users->fetchRow('userID = ' . $users->getAdapter()->quote($userID, 'INTEGER'));  

时手动引述的整数。

c) $users->fetchRow('userID = ?', $userID);  

时自动通过Zend_Db_Adapter_*::quoteInto()引用

d) $users->fetchRow('userID = ?', $users->getAdapter()->quote($userID, 'INTEGER'));

时的实际一倍你引用,一次,并通过一次自动报价。

至于“最佳”而言,我会建议选项C.该框架将自动调用的参数值quoteInto

记住:您总是可以Zend_Db_Table_SelectZend_Db_Select的一个实例传递给fetchRow()方法,而不是...

再次在Zend_Db_Table_Abstract的一个子类,即是这样的:

$this->fetchRow($this->select()->where('userID = ?', $userID));

这样的加分,就是你可以构建更复杂的查询,你有过很多,远不止SQL查询的WHERE条款控制。从理论上讲,你可以很容易做的:

$select = $this->select()->where('userID = ?', $userID)
                         ->join(array('sat' => 'superAwesomeTable'), array('sat.user_id = userID', array('superAwesomeColumn'));

$this->fetchRow($select);

注意:如果通过Zend_Db_Select的一个实例,该fetchRow()方法充当酷似fetchAll() 它内部调用选择对象的limit()法,用1的参数

其他提示

我习惯

$where = $this->getAdapter()->quoteInto('name = ?', $name);
$this->fetchRow($where);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top