【问题标题】:fixing the error in query codeigniter model syntax error修复查询codeigniter模型语法错误中的错误
【发布时间】:2017-11-29 23:37:35
【问题描述】:

为什么我在 codeigniter 中的模型中出现错误:

A Database Error Occured
Error Number: 1064 
You have error in your SQL syntax;

当我尝试在 mysql 中运行它时,它工作正常。但是当我把它放在我的 CI 模型中时,它给了我错误号:1064

这是我的完整模型代码:

public function checkupID() {
        $query = $this->db->query(' SELECT check_up_id FROM tbl_check_up JOIN (SELECT MAX(CAST(SUBSTRING_INDEX(check_up_id, '-', -1) AS DECIMAL)) AS max_right FROM tbl_check_up) AS x
                    ON SUBSTRING_INDEX(check_up_id, '-', -1) = max_right ');
        return $query->result();
    }

我的表结构

+-------------+----------+---------+--------+
|  Field      |  Type    |  NULL   | Key    |
+-------------+----------+---------+--------+
| check_up_id | varchar  |  NO     | PRI    |
+-------------+----------+---------+--------+
| note        | varchar  |  YES    |        |
+-------------+----------+---------+--------+

【问题讨论】:

  • 能否请在末尾添加x.max_right 而不是max_right
  • @ShyamShingadiya 谢谢您的回复先生......为什么在 mysql 工作正常时在 codeigniter 中出现错误?
  • 首先让我知道它在 CI 中是否适合你?
  • @ShyamShinadiya 感谢先生的快速回复。在 CI 中它不起作用并警告发生数据库错误的错误,它说检查语法。但在 mysql 中。它工作正常。
  • 让我给你一个合适的解决方案,你能分享tbl_check_up的表模式吗?

标签: mysql codeigniter model


【解决方案1】:

请在下面找到我的答案。您可以在 mysql 中创建存储过程,如下所示。

DELIMITER $$

DROP PROCEDURE IF EXISTS `getCheckUpId`$$

CREATE PROCEDURE `getCheckUpId`()
BEGIN
    SELECT 
        t1.check_up_id 
    FROM tbl_check_up t1 
    JOIN (SELECT MAX(CAST(SUBSTRING_INDEX(t2.check_up_id, '-', -1) AS DECIMAL)) AS max_right FROM tbl_check_up t2) AS x ON SUBSTRING_INDEX(t1.check_up_id, '-', -1) = x.max_right;
    END$$

DELIMITER ;

现在您可以在您的模型中创建如下所述的内容。

public function checkupID() {
    $query = $this->db->query('call getCheckUpId()');
    return $query->row();
}

我希望这会对你有所帮助。如果它不起作用,请告诉我。

【讨论】:

  • @JcJohn :很高兴能帮助你摆脱这个障碍,
  • 为什么要写程序?您可以简单地将双引号放入查询中。 $query = $this->db->query(" SELECT check_up_id FROM tbl_check_up JOIN (SELECT MAX(CAST(SUBSTRING_INDEX(check_up_id, '-', -1) AS DECIMAL)) AS max_right FROM tbl_check_up) AS x ON SUBSTRING_INDEX(check_up_id , '-', -1) = max_right ");
  • @438sunil : 你认为用double quotes (") 可以解决这个问题吗..?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
相关资源
最近更新 更多