zend框架where查询中的语句

时间:2012-06-30 10:51:34

标签: php mysql zend-framework where-clause

我如何在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);

是正确的方法吗?如果不是正确的方法是什么?

3 个答案:

答案 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);

您当前正在使用旧语法,但它仍然可以使用它已被弃用。