【问题标题】:how do i ignore the backticks in codeigniter when using active records? i need to order by cases使用活动记录时如何忽略 codeigniter 中的反引号?我需要按情况订购
【发布时间】:2013-08-07 12:10:06
【问题描述】:

在使用活动记录时如何忽略 codeigniter 中的反引号?我需要按情况订购

case when roll_number is null then 1 else 0 end,

哪个代码点火器使它成为

ORDER BY `case` when roll_number is null then 1 else 0 end

这给了我一个错误。请帮忙

【问题讨论】:

  • 你遇到了什么错误?
  • 发布一些你得到错误的代码!

标签: php mysql codeigniter


【解决方案1】:

这可能有点旧,但是对于正在寻找答案的人,您可以添加

$this->db->_protect_identifiers=false;

请注意,这将删除此查询中的所有反引号

【讨论】:

    【解决方案2】:

    来自the docs

    $this->db->select() 接受可选的第二个参数。如果您将其设置为 FALSE,CodeIgniter 将不会尝试使用反引号保护您的字段或表名称。如果您需要复合选择语句,这很有用。

    【讨论】:

    • 这是我用来订购的 cide:$this->db->order_by('case when roll_number is null then 1 else 0 end, CASE WHEN roll_number like "%-%" THEN roll_number END, CASE WHEN roll_number not like "%-%" THEN CAST( trim(roll_number) AS SIGNED ) END'),'asc',FALSE);
    【解决方案3】:

    感谢您的回答...

    我发现在活动记录中使用$this->db->order_by() 时不能跳过反引号。

    所以最终使用了$this->db->query($sql);,我将正常的mysql查询分配给$sql变量

    【讨论】:

    • 我们可以通过在查询开始 $this->db->_protect_identifiers=false 之前添加这一行来完成这项工作。 @stalin 已发表评论
    猜你喜欢
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多