【问题标题】:Executing muliple sql statements with Codeigniter使用 Codeigniter 执行多个 sql 语句
【发布时间】:2015-10-09 12:01:22
【问题描述】:

事实证明,Codeigniter 难以一次执行超过 1 条 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 块?

【问题讨论】:

    标签: mysql sql codeigniter codeigniter-2


    【解决方案1】:

    错误只是指出你。

    表格必须有至少 1 列

    所以创建查询应该是这样的。 (给出您将存储数据的所有表列名称)

    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)
    );
    

    【讨论】:

    • 感谢您的输入,但这需要一个非常大的 sql 语句,因为该表有很多字段。
    • 无害,只执行一次
    • 是的,但我希望我的代码尽可能的简洁。
    【解决方案2】:

    我想出了一个解决办法:

        $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(); 
    

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

    【讨论】:

    • 但我的答案是更好的答案(恕我直言)。我已经对其进行了全面测试并且可以正常工作。
    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多