使用 Zend 框架进行原始 SQL 查询

问题描述 投票:0回答:4

有没有办法在 Zend Framework 中将 SQL 字符串作为查询执行?

我有一个这样的字符串:

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

现在我想直接执行这个字符串,并解析它并“手动”从中创建一个

Zend_Db_Table_Select
对象。或者,如果可能的话,从该字符串创建一个
Zend_Db_Table_Select
对象,以执行该对象。

我怎样才能做到这一点?我在 Zend 文档中没有找到解决方案。

php mysql sql zend-framework
4个回答
27
投票

如果您在开始时创建一个 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);
$stmt->execute(array('goofy', 'FIXED'));

5
投票

如果您使用的是 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();

3
投票

这是 ZF1 的示例:

$db =Zend_Db_Table_Abstract::getDefaultAdapter();
$sql =    "select * from user"
$stmt = $db->query($sql);
$users =  $stmt->fetchAll();
© www.soinside.com 2019 - 2024. All rights reserved.