Zend框架凡在查询语句(zend framework where statement in que

2019-09-18 20:34发布

如何使用和/或使用PHP和Zend framework.for我现在用的这个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);

是正确的方法是什么? 如果没有什么是正确的方法是什么?

Answer 1:

您可以添加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注入的简单方法。



Answer 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变量这样做。)

你也可以连接在一起,其中有多个条款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);


Answer 3:

下面将解决你的问题,请参见PHP与Postgres的WHERE“与”条款Zend框架的选择查询 ,了解如何在那里()和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语句的字符串表示

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

您目前正在使用旧的语法,而它仍然会工作,它已被弃用。



文章来源: zend framework where statement in query