如何使用和/或使用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);
是正确的方法是什么? 如果没有什么是正确的方法是什么?
您可以添加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注入的简单方法。
这是一种方式,但你应该使用? 对于变量来防止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);
下面将解决你的问题,请参见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);
您目前正在使用旧的语法,而它仍然会工作,它已被弃用。