2012-11-01 48 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查询的自定义查询。

相关问题