2011-05-28 89 views
14

有没有办法在Zend Framework中执行SQL String作为查询?使用Zend Framework进行RAW SQL查询

我有一个字符串这样的:

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

现在我想直接withput分析它和“手动”创建从它Zend_Db_Table_Select对象执行该字符串。或者如果可能的话,从这个字符串创建一个Zend_Db_Table_Select对象,以执行该对象。

我该怎么做?我在Zend doc中找不到解决方案。

回答

22

如果您在开始时创建Zend_DB对象,则可以使用该对象创建查询。看一看在手册此项:http://framework.zend.com/manual/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); 
+1

确实'$ DB->查询(SQL $,阵列())'工作也?因为我确实已经将参数输入字符串!?我必须用'$ stmt-> fetchAll()'获取结果集吗? – 2011-05-28 12:45:25

+0

Thanx它像一个魅力工作! – 2011-05-28 12:57:05

+0

为了完整起见:是的,$ stmt-> fetchAll()会得到结果。 – 2015-06-22 10:53:10

2

您可以使用Zend的格式相同的查询

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

这里不需要使用quoteInto()。哪里()会自动为你做。 – txyoji 2017-07-24 16:16:29

2

如果您正在使用tableGateway,你可以使用此语句运行原始SQL查询,

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

其中$ sql属于您的原始查询。对于没有像TRUNCATE/INSERT SELECT语句那样的本机ZF2对应的查询,这可能很有用。

1

下面是ZF1的例子:

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

对我来说,它不工作,顺便说一句,我必须定义上面提到的$ db变量,在我的类从Zend_Db_Table_Abstract延伸或在我的控制器? – adm 2016-05-02 16:17:47

+0

@adm你可以使用** $ db = Zend_Db_Table_Abstract :: getDefaultAdapter(); ** anywhrere。以上代码来自我的控制器。 – 2016-05-03 06:57:29

+0

它给了我一个这样的错误: 致命错误:调用一个成员函数query()上的非对象在/home/tmtmedia/public_html/trakmysafari/application/models/trip.php 199行 – 2016-09-30 05:55:01