2

我按照此处的 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);。谢谢您的帮助!

4

4 回答 4

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();
于 2013-01-24T08:15:27.793 回答
1

请使用此处http://ellislab.com/codeigniter/user-guide/database/forge.html的 DCL 和 DDL 操作的 Database Forge 类。

于 2013-01-24T08:08:18.390 回答
1

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

if ($my_sql-> num_rows() > 0) {
    $result = $my_sql-> result();
    return $result;
} else {
    return FALSE;
}
于 2013-07-27T12:34:02.537 回答
0

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

于 2014-03-13T20:23:07.430 回答