CodeIgniter Active Record中的SQL注释?

时间:2012-11-01 12:00:12

标签: php sql sql-server codeigniter

我正在将项目移至CodeIgniter,并希望利用Active Record。但是,我还没有找到一种方法来向查询添加SQL注释。在现有代码中,查询看起来像这样:

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

我搜索Google和SO并没有找到如何添加最后一个“Transacted by”评论的答案,而不直接编码整个事情并使用$this->db->query('.....')

2 个答案:

答案 0 :(得分:2)

我不相信这在ActiveRecord中是可行的,因为AR的功能有点限制。一个可能有用的选项是为你的"使用自定义字符串。条款,并在您的自定义结束时粘贴您的交易评论"其中"串。我自己没有测试过这个。

即使您必须手动执行查询,CI也会提供一些不错的转义函数($this->db->escape表示数字,$this->db->escape_str表示'其中'字符串和$this->db->escape_like_str表示'类似的字符串)应该使您自己的查询安全 - 我知道在大多数更复杂的CI应用程序中,由于AR的限制性,我需要为大约1/5的查询编写自定义查询。

答案 1 :(得分: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)

我无法获得Inserts的解决方案,因为他们没有where语句,并且试图在其他地方注入注释似乎不起作用。我最终在插入之前运行它,以便为DBA提供一些内容: $this->db->get_where('Same_TableName','0=1'.$this->sqlStamp);