我正在将项目移至CodeIgniter,并希望利用Active Record。但是,我还没有找到一种方法来向查询添加SQL注释。在现有代码中,查询看起来像这样:
UPDATE table
SET column = 'value'
WHERE ID = passed value;
-- Transacted by ' .$_SESSION['Name']
我搜索Google和SO并没有找到如何添加最后一个“Transacted by”评论的答案,而不直接编码整个事情并使用$this->db->query('.....')
答案 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);