【问题标题】:Codeigniter $this->db->query not working with valid native SQLCodeigniter $this->db->query 不适用于有效的本机 SQL
【发布时间】:2013-01-24 08:03:30
【问题描述】:

我按照此处的 CI 用户指南 http://ellislab.com/codeigniter/user-guide/database/queries.html 操作,但仍然无法让此查询正常工作。我可以将不带 '' 的确切代码粘贴到工作台中,它运行良好,所以我不确定 CI 语法在哪里出错。 这里是:

    public function test(){
        ini_set('memory_limit','-1')
        $my_sql = $this->db->query( 

            'DROP TABLE temp1;
            DROP TABLE temp2;
            CREATE TEMPORARY TABLE temp1 (id varchar(150),user varchar(150),item varchar(150),city varchar(150));
            INSERT INTO  temp1 SELECT id, user, item, city FROM add WHERE user = 1;
            CREATE TEMPORARY TABLE temp2 (id varchar(50),vendor varchar(50)) ;
            INSERT INTO temp2 SELECT id, vendor FROM selection;
            SELECT a.user, a.id, a.item, a.city, b.vendor
            FROM temp1 a 
            RIGHT JOIN temp2 b ON a.id=b.id;'
        );

        $query = $this->db->get($my_sql);
        return $query->result_array();

    }

我的错误是 1064 error in SQL syntax。当我在本地运行它时,它引用 DB_driver.php 文件第 330 行。在云中运行时,它引用这一行 $query = $this->db->get($my_sql);。感谢您的帮助!

【问题讨论】:

    标签: mysql codeigniter


    【解决方案1】:

    不需要get(),因为你已经调用了query()..

    get 运行选择查询并返回结果。可单独用于检索表中的所有记录

    试试这个

     $my_sql = $this->db->query( 
    
            'DROP TABLE temp1;
            DROP TABLE temp2;
            CREATE TEMPORARY TABLE temp1 (id varchar(150),user varchar(150),item varchar(150),city varchar(150));
            INSERT INTO  temp1 SELECT id, user, item, city FROM add WHERE user = 1;
            CREATE TEMPORARY TABLE temp2 (id varchar(50),vendor varchar(50)) ;
            INSERT INTO temp2 SELECT id, vendor FROM selection;
            SELECT a.user, a.id, a.item, a.city, b.vendor
            FROM temp1 a 
            RIGHT JOIN temp2 b ON a.id=b.id;'
        );
    
        return $my_sql->result_array();
    

    【讨论】:

    • 谢谢 bipen!我进行了这些更改,但仍然收到相同的错误。
    【解决方案2】:

    请使用 Database Forge 类进行 DCL 和 DDL 操作 在这里找到http://ellislab.com/codeigniter/user-guide/database/forge.html

    【讨论】:

      【解决方案3】:

      你需要直接从 $my_sql 返回结果,使用这个: 返回$my_sql->result_array(); 或此以获取更多信息:

      if ($my_sql-> num_rows() > 0) {
          $result = $my_sql-> result();
          return $result;
      } else {
          return FALSE;
      }
      

      【讨论】:

        【解决方案4】:

        问题是CI默认使用mysql PHP API,运行->query最终运行mysql_query函数,不允许多条SQL语句(这是出于安全考虑)。
        看起来 mysqli API 有一个 multi_query 函数,允许执行多个查询。 您的另一个选择是使用 REGEX 将包含多个查询的字符串拆分为子查询。

        【讨论】:

          猜你喜欢
          • 2011-12-15
          • 2016-12-29
          • 2018-02-02
          • 1970-01-01
          • 2017-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多