2011-05-28 148 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