首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codeigniter 3迁移sql

Codeigniter 3迁移sql
EN

Stack Overflow用户
提问于 2015-12-11 11:23:00
回答 2查看 2.9K关注 0票数 2

我使用Codeigniter 3框架作为我的应用程序,我使用迁移库。我编写了一个创建'user_type‘表的对象,并将其插入到三行。

以下是代码:

代码语言:javascript
复制
private $tableName = 'user_type';

public function up() {
    $sql = "CREATE TABLE `$this->tableName` (
                `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , 
                `name` CHAR(120) NOT NULL
            ) ENGINE = InnoDB;";

    $sql .= "INSERT INTO `$this->tableName` (`id`, `name`) VALUES
                (1, 'user'), (2, 'provider'), (3, 'admin');";

    $this->db->query($sql);
}

如果我想使用迁移,它将删除一条带有以下文本的错误消息:发生了数据库错误

错误号: 1064 您的SQL语法有错误;请检查与MySQL服务器版本对应的手册,以便在第4行使用接近“INSERT INSERT user_type (idname)值”(1,“user”),(2,“provider”)的正确语法。 创建表user_type ( id TINYINT无符号非空AUTO_INCREMENT主键,name CHAR(120) NULL )引擎=InnoDB;插入user_type (idname)值(1,'user'),(2,'provider'),(3,admin‘); 文件名: C:/xampp/htdocs/rentacar/application/migrations/20151211113200_usertype_table_data.php 线路号码: 18

其中有趣的部分是,如果我回显$sql变量,并在phpmyadmin中运行它,它就工作得很好。

EN

回答 2

Stack Overflow用户

发布于 2018-05-17 11:22:24

不能一次执行多个sql语句。

拆分语句并执行每个语句,如下所示。

代码语言:javascript
复制
private $tableName = 'user_type';

public function up() {
    // First
    $sql = "CREATE TABLE `$this->tableName` (
                `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , 
                `name` CHAR(120) NOT NULL
            ) ENGINE = InnoDB;";
    $this->db->query($sql);

    // Second
    $sql = "INSERT INTO `$this->tableName` (`id`, `name`) VALUES
                (1, 'user'), (2, 'provider'), (3, 'admin');";
    $this->db->query($sql);
}
票数 1
EN

Stack Overflow用户

发布于 2015-12-11 11:35:20

使用dbfore创建表,

代码语言:javascript
复制
$this->load->dbforge();
$tableName = 'user_type';

$this->dbforge->add_field(array(
    'id' => array(
        'type' => 'TINYINT UNSIGNED NOT NULL'
    ),
    'name' => array(
        'type' => 'VARCHAR',
        'constraint' => '120',
    )
));

$this->dbforge->create_table($tableName);

$sql = "INSERT INTO `$tableName` (`id`, `name`) VALUES
        (1, 'user'), (2, 'provider'), (3, 'admin');";

$this->db->query($sql);

dbforge

编辑

在这种情况下,尝试像这样中断查询

代码语言:javascript
复制
$tableName = "user_type";
$sql = "";
$sql = "CREATE TABLE `$tableName` (
        `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , 
        `name` CHAR(120) NOT NULL
    ) ENGINE = InnoDB;";
echo $this->db->query($sql);
$sql = "  INSERT INTO `$tableName` (`id`, `name`) VALUES
        (1, 'user'), (2, 'provider'), (3, 'admin')";

echo $this->db->query($sql);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34222410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档