Codeigniter $ this-> db->查询无法使用有效的本机SQL

时间:2013-01-24 08:03:30

标签: mysql codeigniter

我在http://ellislab.com/codeigniter/user-guide/database/queries.html跟踪了CI用户指南,但仍然无法使此查询生效。我可以粘贴这个确切的代码而不用''到工作台,它运行正常,所以我不确定我在哪里有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);。谢谢你的帮助!

4 个答案:

答案 0 :(得分:2)

无需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();

答案 1 :(得分:1)

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

答案 2 :(得分:1)

你需要直接从$ my_sql返回结果,只需使用: 返回$my_sql->result_array();或更多信息:

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

答案 3 :(得分:0)

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