【发布时间】:2017-03-05 21:40:09
【问题描述】:
在更新中我正在使用它是一个
UPDATE LOW_PRIORITY table
我们之前使用的是数据库类protect_identifiers中的一个覆盖,它通常看起来像这样
$this->db->_reserved_identifiers = array('*', 'LOW_PRIORITY');
这似乎是滚动到 CI3 的方式。 Codeigniter : Error in ORDER BY CASE query(基本一样的问题)
在 CI2 中调用时
$this->db->_reserved_identifiers = array('*', 'LOW_PRIORITY')
我试图执行的那段代码会生成
UPDATE LOW_PRIORITY table set ...
但在 CI3 中它会生成
UPDATE 'LOW_PRIORITY' 'table' set ...
(它似乎基本上试图逃避它。)
现在protect_identifiers var 是受保护的,如果不扩展db-class,我无法真正从外部更新它。我真的不想这样做,因为这似乎是我在 CI 更新后唯一“无法解决”的问题。
是否有可能以不同的方式处理?
这就是我想要做的事情
if($exist){
if($this->db->update('LOW_PRIORITY table', $allMyDatas)
/*
* Should print something like
* UPDATE LOW_PRIORITY table
* SET field = 'fielddata' WHERE something = 'something'
*/
} else {
if($this->db->insert('LOW_PRIORITY table', $allMyDatas)
}
【问题讨论】:
-
protect_identifiers()的实际使用似乎有什么问题?顺便说一句,你的调用似乎不对,这个函数的签名是这样的:protect_identifiers($item, $prefix_single = FALSE, $protect_identifiers = NULL, $field_exists = TRUE)。好像我误解了你的目标 -
我的错!添加了错误的代码。这不是protect_identifiers,我试图用它做一些魔法。实际问题在于设置 $this->db->_reserved_identifiers = array('*', 'LOW_PRIORITY');也更新了问题。
-
我添加了一个答案。希望这可以帮助。如果您愿意,我可以提供基本示例。只是目前我手头没有 CI3 安装来为您提供实际的工作代码来解决您的问题,但应用起来似乎并不难
-
基本示例会很棒!即使没有 CI3 上下文
标签: php codeigniter mariadb codeigniter-3