我在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);
。谢谢你的帮助!
答案 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将包含多个查询的字符串拆分为子查询。