2

如何使用 php 和 zend 框架在 mysql 查询中使用 And/or。现在我正在使用这个:

    $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);

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

4

3 回答 3

3

您可以通过多次AND调用将 's 添加到查询中:where()

$select->where('this = ?', 'myValue')
       ->where('that = ?', 'myValue2');

这将转化为:

... WHERE this = 'myValue' AND that = 'myValue2'

要将一个或多个OR's 添加到您的查询中,请使用orWhere()

$select->where('this = ?', 'myValue')
       ->orWhere('that = ?', 'myValue2');

这将转化为:

... WHERE this = 'myValue' OR that = 'myValue2'

笔记

请务必使用?占位符语法,因为它是防止 SQL 注入的简单方法。

于 2012-06-30T11:10:11.037 回答
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);

(如果有时也来自 PHP 变量,则对 'sold' 执行相同操作。)

您还可以将 where 子句与多个where()调用链接在一起,或者orWhere()如果您想要 or 代替 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 使用 fluent 影响,您也可以这样写:

$select=new Zend_Db_Select($db);
$select->from('users','*')
       ->joinInner('rest', 'users.repository = rest.id', array('username'))
       ->where('username = ?' $rest)
       ->where('sold = ?', 0);
于 2012-06-30T11:11:12.673 回答
0

以下将解决您的问题,请参阅PHP postgres Zend Framework Select query with WHERE 'AND' 子句,以更完整地了解 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 语句的字符串表示形式

即(?是 $value 的占位符):
$select->where('id = ?', $id);
$select->orWhere('age > ?', $age);

您当前使用的是旧语法,虽然它仍然可以工作,但它已被弃用。

于 2012-07-01T06:24:47.977 回答