3

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

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

我已经搜索了 Google 和 SO,但没有找到如何添加最后一个“交易者”评论的答案,而无需直接对整个内容进行编码并使用$this->db->query('.....')

4

2 回答 2

2

我不相信这在 ActiveRecord 中是可能的,因为 AR 的功能有点限制。一种可行的选择是为您的“where”子句使用自定义字符串,并将您的交易注释粘贴在自定义“where”字符串的末尾。我自己没有测试过这个。

即使您必须手动进行查询,CI 也提供了一些很好的转义函数($this->db->escape对于数字、$this->db->escape_str'where' 字符串和$this->db->escape_like_str'where like' 字符串)应该使您自己的查询安全 - 我知道在我的大多数更复杂的 CI由于 AR 的限制,我需要为大约 1/5 的查询编写自定义查询。

于 2012-11-01T12:54:45.197 回答
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);

于 2013-01-08T17:05:02.113 回答