Запрос RAW SQL с помощью Zend Framework

Есть ли способ выполнить SQL String в качестве запроса в Zend Framework?

У меня есть строка вроде этого:

$sql = "SELECT * FROM testTable WHERE myColumn = 5"

теперь я хочу выполнить эту строку непосредственно с помощью парсинга и создания объекта Zend_Db_Table_Select из него "вручную". Или, если это возможно, создайте объект Zend_Db_Table_Select из этой строки, чтобы выполнить этот объект.

Как я могу это сделать? Я не нашел решения для этого в документе Zend.

Ответы

Ответ 1

Если вы создаете объект Zend_DB в начале, вы можете создать запрос, используя его. Посмотрите на эту запись в руководстве: https://framework.zend.com/manual/1.12/en/zend.db.statement.html

$stmt = $db->query(
            'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?',
            array('goofy', 'FIXED')
        );

Или

$sql = 'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?';
$stmt = new Zend_Db_Statement_Mysqli($db, $sql);

Ответ 2

Если вы используете tableGateway, вы можете запустить свой необработанный SQL-запрос, используя этот оператор,

$this->tableGateway->getAdapter()->driver->getConnection()->execute($sql);

где $sql относится к вашему необработанному запросу. Это может быть полезно для запросов, у которых нет собственного сопоставления ZF2, такого как инструкции TRUNCATE/INSERT SELECT.

Ответ 3

Вы можете использовать тот же запрос в формате Zend, что и

$select = db->select()->from(array('t' => 'testTable'))
                     ->$where= $this->getAdapter()->quoteInto('myColumn = ?', $s);
$stmt = $select->query();
$result = $stmt->fetchAll();

Ответ 4

Вот пример для ZF1:

$db =Zend_Db_Table_Abstract::getDefaultAdapter();
$sql =    "select * from user"
$stmt = $db->query($sql);
$users =  $stmt->fetchAll();