2015-10-09 53 views
1

因此,Codeigniter一次只能执行一个以上的SQL语句。使用Codeigniter执行多语句SQL语句

一路上这是使用trans_starttrans_complete函数,但是,这不适用于创建临时表。

$this->db->trans_start(); 
    $this->db->query('CREATE TEMPORARY TABLE tmptable_1;'); 
    $this->db->query('SELECT * FROM banner_data WHERE id = '.$id.';'); 
    $this->db->query('UPDATE tmptable_1 SET id = NULL;'); 
    $this->db->query('INSERT INTO banner_data SELECT * FROM tmptable_1;'); 
    $this->db->query('DROP TEMPORARY TABLE IF EXISTS tmptable_1;'); 
    $this->db->trans_complete(); 

上面的代码生成以下错误:

A table must have at least 1 column 

CREATE TEMPORARY TABLE tmptable_1; 

Filename: models/Banners_generator_model.php 

是否有一个去执行SQL的一个整块的方法吗?

回答

0

我周围想出了一个办法这个:

$this->db->trans_start(); 
    $this->db->query('CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM banner_data WHERE id = '.$id.';'); 
    $this->db->query('UPDATE tmptable_1 SET id = NULL;'); 
    $this->db->query('INSERT INTO banner_data SELECT * FROM tmptable_1;'); 
    $this->db->query('DROP TEMPORARY TABLE IF EXISTS tmptable_1;'); 
    $this->db->trans_complete(); 

通过合并原始的前两行,数据库将根据要复制的表的结构构建表列。

+0

但我的回答是更好的答案(恕我直言)。我已经完全测试过它,它可以工作。 – richelliot

2

错误只是指出你。

A table must have at least 1 column

所以创建Query应该是这样的。 (给所有要存储的数据表的列名)

SQL CREATE TABLE语法

CREATE TABLE table_name 
(
    column_name1 data_type(size), 
    column_name2 data_type(size), 
    column_name3 data_type(size), 
    .... 
); 

CREATE TABLE Persons 
(
    PersonID int, 
    LastName varchar(255), 
    FirstName varchar(255), 
    Address varchar(255), 
    City varchar(255) 
); 
+0

感谢您的输入,但这将需要一个非常大的sql语句,因为表中有许多字段。 – richelliot

+0

没有伤害它只能执行一次 –

+0

是的 - 但我喜欢我的代码尽可能小。 – richelliot