zend framework, где выражение в запросе

Как я могу использовать And / или в mysql-запросах, используя php и zend framework.for сейчас я использую это:

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

это правильный путь? если не правильный путь?

Solutions Collecting From Web of "zend framework, где выражение в запросе"

Вы можете добавить 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.

Это один из способов, но вы должны использовать? заполнители переменных для защиты от 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).

Вы также можете orWhere() цепочку с предложениями с несколькими вызовами orWhere() или 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 Zend Framework. Выберите запрос с предложением 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);

В настоящее время вы используете старый синтаксис, в то время как он все равно будет работать, он устарел.