我如何在php和zend framework中使用And /或mysql查询。现在我正在使用它:
$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);
是正确的方法吗?如果不是正确的方法是什么?
答案 0 :(得分:3)
您可以多次调用AND
向查询中添加where()
:
$select->where('this = ?', 'myValue')
->where('that = ?', 'myValue2');
这将转化为:
... WHERE this = 'myValue' AND that = 'myValue2'
要在查询中添加一个或多个OR
,请使用orWhere()
:
$select->where('this = ?', 'myValue')
->orWhere('that = ?', 'myValue2');
这将转化为:
... WHERE this = 'myValue' OR that = 'myValue2'
注意强>
请务必使用?
占位符语法,因为这是阻止SQL注入的简单方法。
答案 1 :(得分:2)
这是一种方式,但你应该使用?用于防止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);
(对于'sold'也是如此,如果这有时也来自PHP变量。)
您还可以将包含多个where()
来电的条款或orWhere()
链接在一起,如果您需要或代替以及:
$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);
答案 2 :(得分:0)
以下内容将解决您的问题,请参阅PHP postgres Zend Framework Select query with WHERE 'AND' clause以获取有关where()和orWhere()如何工作的更完整的说明。
$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);//multiple where() will use AND operator in query
$select->where('sold = ?', 0);//if you need the OR operator use the orWhere() method
return $db->fetchAll($select);
回答问号(摘自手册):
fetchAll($select, $value)//most of the Zend_Db methods follow this API
fetchAll()方法: 此方法的第一个参数是包含SELECT的字符串 声明。或者,第一个参数可以是类的对象 Zend_Db_Select对象。适配器自动将此对象转换为 SELECT语句的字符串表示
ie(?是$ value的占位符):
$select->where('id = ?', $id);
$select->orWhere('age > ?', $age);
您当前正在使用旧语法,但它仍然可以使用它已被弃用。