Php zend framework查询中的where语句
如何使用php和zend framework在mysql查询中使用和/或。目前,我使用以下方法:Php zend framework查询中的where语句,php,mysql,zend-framework,where-clause,Php,Mysql,Zend Framework,Where Clause,如何使用php和zend framework在mysql查询中使用和/或。目前,我使用以下方法: $db=Zend_Db_Table::getDefaultAdapter(); $select=new Zend_Db_Select($db); $select->from('users','*'); $select->joinInner('rest', 'users.repository = rest.id',array('username'));
$db=Zend_Db_Table::getDefaultAdapter();
$select=new Zend_Db_Select($db);
$select->from('users','*');
$select->joinInner('rest', 'users.repository = rest.id',array('username'));
$select->where('username='.$rest.' and sold=0');
return $db->fetchAll($select);
这是正确的方法吗?如果不是,正确的方法是什么?您可以通过多次调用
where()
将和添加到查询中:
$select->where('this = ?', 'myValue')
->where('that = ?', 'myValue2');
这将转化为:
... WHERE this = 'myValue' AND that = 'myValue2'
... WHERE this = 'myValue' OR that = 'myValue2'
要向查询中添加一个或多个或,请使用或where()
:
这将转化为:
... WHERE this = 'myValue' AND that = 'myValue2'
... WHERE this = 'myValue' OR that = 'myValue2'
注意
确保使用占位符语法,因为这是防止SQL注入的简单方法。这是一种方法,但您应该使用?用于防止SQL注入的变量的占位符:
$select=new Zend_Db_Select($db);
$select->from('users','*');
$select->joinInner('rest', 'users.repository = rest.id', array('username'));
$select->where('username = ? and sold=0', $rest);
(如果“sell”有时也来自PHP变量,请对其执行相同的操作。)
您还可以将where子句与多个where()
调用或orWhere()
链接在一起,如果您想要或代替and:
$select=new Zend_Db_Select($db);
$select->from('users','*');
$select->joinInner('rest', 'users.repository = rest.id', array('username'));
$select->where('username = ?' $rest);
$select->where('sold = ?', 0);
由于Zend_Db_Select使用流畅的效果,您也可以这样编写:
$select=new Zend_Db_Select($db);
$select->from('users','*')
->joinInner('rest', 'users.repository = rest.id', array('username'))
->where('username = ?' $rest)
->where('sold = ?', 0);
下面将解决您的问题,有关where()和orWhere()如何工作的更完整的书面说明,请参阅
回答有关问号的问题(摘自手册):
fetchAll($select,$value)//大多数Zend_Db方法都遵循此API
fetchAll()方法:
此方法的第一个参数是包含SELECT的字符串
陈述或者,第一个参数可以是类的对象
Zend_Db_选择。适配器会自动将此对象转换为
SELECT语句的字符串表示形式
ie(?是$value的占位符):
$select->where('id=?',$id)代码>
$select->orWhere('age>?',$age)代码>
您当前使用的是旧语法,尽管它仍然可以工作,但已被弃用 谢谢大家,但是是关于还是?例如,我想要这个where(fname='ggg'和(post>5 | |感谢>30)和age=10)最简单的方法是select->where('fname=?','ggg')->where('post>5或感谢>30)代码>谢谢,但可能存在可变风险,感谢sql注入。正如您所看到的,当它们是变量时,它们像字符串一样被传递,使用$select->where('fname=?','ggg')->where('post>?或thanky>?,array(5,30))代码>用PHP变量替换ggg、5和30。