Как я могу использовать 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);
это правильный путь? если не правильный путь?
Вы можете добавить 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);
В настоящее время вы используете старый синтаксис, в то время как он все равно будет работать, он устарел.