Yac*_*oby 0 php mysql zend-framework
我有一个方法,使用zend框架提供的sql适配器从数据库中删除行.
class Table extends Zend_Db_Table_Abstract {
...
$where = $this->getAdapter()->quoteInto(
'ModID=? AND URL=?',
array((int)$mid, $url->toString())
);
$this->delete($where);
Run Code Online (Sandbox Code Playgroud)
问题是这段代码给出了错误:
Zend_Db_Statement_Exception: SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)
在where子句中只指定一列的类似代码可以正常工作.
是否有另一种方法可以根据多列的值删除行?
您可以使用Zend_Db_Select的已构建功能来执行此类操作:
$select = $this->select();
->where('modID = ?', (int)$mid);
->where('URL = ?', $url->toString());
$where = $select->getPart(Zend_Db_Select::WHERE);
$this->delete($where);
Run Code Online (Sandbox Code Playgroud)
有关此解决方案的一些注意事项:
(Pro)利用适配器方法的Zend_Db_Table :: delete代理,因此您可以提供SQL部件的数组.从文档:
"由于表delete()方法代理数据库适配器delete()方法,因此该参数也可以是SQL表达式的数组.表达式使用AND运算符组合为布尔项."
(Con)创建Zend_Db_Select对象,但您实际上只对where子句感兴趣
如果delete方法接受Zend_Db_Select或者Zend_Db_Constraint(不存在的类),那就更好了.您当然可以将其设置为实用程序方法,以便所有表都可以使用它,从而使删除更容易.
另一种方法是简单地跳过select对象:
$where = "{$this->getAdapter()->quoteInto('modID = ?', (int)$mid)} AND
{$this->getAdapter()->quoteInto('URL = ?', $url->toString)}";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |