我的Zend框架“引用”烂摊子
-
19-09-2019 - |
题
我已经有了一个大概很简单的问题,我无法找到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_Select
或Zend_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);