2012-11-01 46 views
2

我正在將項目移動到CodeIgniter並希望利用Active Record。但是,我還沒有找到一種方法來將SQL註釋附加到查詢中。在現有的代碼查詢看起來是這樣的:CodeIgniter Active Record中的SQL註釋?

UPDATE table 
SET column = 'value' 
WHERE ID = passed value; 
-- Transacted by ' .$_SESSION['Name'] 

我搜索谷歌和SO並沒有找到答案,如何添加最後一個註釋「的成交」,而不直接編碼整個事情,使用$this->db->query('.....')

+0

Active Record的優點究竟是什麼?爲什麼不使用db-> query()編寫漂亮的清晰SQL查詢? SQL是關係數據庫引擎的抽象層。 Active Record是抽象層上的一個呃,抽象層?然後,您可以添加所需的所有評論,真正的數據庫專家可以實際閱讀您的查詢併爲您提供幫助。當您可以在PHP中對Active Record構建本身進行註釋時,爲什麼要將註釋插入到Active Record查詢中?數據庫是否會對這些評論做任何事情? –

+1

@PatrickSavalle,這些評論是針對有審計意願的DBA進行的。我不知道爲什麼評論而不是插入表格,但我的理由不是爲什麼,我的只是做和死()。 :)至於爲什麼Active Record,它確實減少了實施所需的代碼。此外,我被告知要做AR(見上面的雙關語)。 – AlexC

回答

0

Darrrrrren的榮譽讓我走上正軌。

我這樣定義在我的控制器變量: $this->sqlStamp = ' /* Executed by ' .strtoupper($this->router->class .'->' .$this->router->method) .' for ' .strtoupper($this->session->userdata('displayName')) .'*/ ';

更新和刪除我能釘在 ->where('1=1'.$this->sqlStamp, NULL, false)

我無法獲得插入的解決方案,因爲他們沒有where語句並試圖在其他地方註釋註釋似乎不起作用。我結束了在插入之前運行這個以使DBA可以尋找的東西: $this->db->get_where('Same_TableName','0=1'.$this->sqlStamp);

2

我不認爲在ActiveRecord中這是可能的,因爲AR的功能有一點限制。一種可行的方法是在你的「where」子句中使用一個自定義字符串,並在你的自定義「where」字符串的末尾粘貼交易註釋。我沒有自己測試過。

即使你有做手工查詢,CI提供了一些很好的逃逸功能($this->db->escape數字,$this->db->escape_str爲「其中」字符串和$this->db->escape_like_str爲「其中像」字符串),應該使自己的查詢安全 - 我知道在我大多數更復雜的CI應用程序中,由於AR的限制性,我需要編寫大約1/5查詢的自定義查詢。

相關問題