2011-02-25 44 views
2

我正在工作一個圖書館,需要餵食sql查詢作爲字符串todo其工作。codeigniter活動記錄,生成,但不執行查詢

我正在使用CodeIgniter及其數據庫類的活動記錄實現。

我知道我可以像這樣回顯SQL語句......但我只想生成此查詢,而不是執行它。

echo $this->db->last_query(); 

任何幫助完成這將是偉大的!

+0

怎麼樣回聲 「{$這個 - > DB-> last_query()}」; ? – rabidmachine9

+0

我試圖得到沒有執行查詢的SQL語句... – Peter

回答

3

您正在使用的last_query()函數返回查詢字符串,它不會執行它。嘗試將函數返回分配給您的庫中使用的變量。

$str = $this->db->last_query(); 
+1

這將首先執行查詢,然後獲取字符串sql,用戶get_compiled_select/update/insert代替... – kreamik

+3

這是查詢執行後的返回者...所以答案不對 – Florin

2

我不知道這是一種安全的做法,但在數據庫對象存儲其在查詢查詢屬性,所以你可以通過獲得它:

$this->db->queries 

返回查詢的數組。

+0

這是針對已經執行的查詢嗎? – Peter

+0

不應該像這樣訪問屬性,因爲這正是我們在PHP5化範圍時可能變成私有屬性的那種東西。但是,是的,它可能會奏效。 –

+0

@Phil,有沒有辦法讓我得到sql語句而不執行查詢? – Peter

5

取決於它是哪種類型的查詢。插入和更新有方法讓你做到這一點。

$this->db->set('foo', $bar); 
$this->db->update_string('table'); // UPDATE table SET foo = "bar" 
+0

我只想生成select查詢。 – Peter

+0

這應該是被接受的答案!幹得好,從來不知道這個! – NaturalBornCamper

6

一個小黑客,你可以做到這一點去系統/ DB_active_rec.php並刪除保護關鍵字形式_compile_select方法,現在

return $this->db->_compile_select(); 

還可以使用$this->db->from('table');

而不是get()因爲GET將執行查詢 下面是一個例子

function index(){ 
    $this->db->select('blah blah'); 
    $this->db->from('table'); 
    $string = $this->db->_compile_select(); 
    return $string; 
} 
+0

這是正確的答案 – Florin