Php Codeigniter 3迁移sql

Php Codeigniter 3迁移sql,php,mysql,codeigniter,migration,Php,Mysql,Codeigniter,Migration,我在应用程序中使用Codeigniter 3框架,并使用迁移库。我写了一个对象,它创建了一个“用户类型”表,并插入到三行中 代码如下: private $tableName = 'user_type'; public function up() { $sql = "CREATE TABLE `$this->tableName` ( `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,

我在应用程序中使用Codeigniter 3框架,并使用迁移库。我写了一个对象,它创建了一个“用户类型”表,并插入到三行中

代码如下:

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服务器版本,以便使用正确的语法 在“插入用户类型”(
id
name
)值(1,'user'),(2, 第4行的“提供者”)

创建表
user\u type
id
TINYINT UNSIGNED NOT NULL 自动递增主键,
name
CHAR(120)非空)引擎= InnoDB;将值(1,'用户'),(2, "提供者",(3"管理"),

文件名: C:/xampp/htdocs/rentacar/application/migrations/20151211113200_usertype_table_data.php

电话号码:18


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

使用
dbfore
创建表

$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);
了解

编辑
在这种情况下,试着像这样打断您的查询

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

您不能同时执行多个sql语句。
拆分语句并执行每个语句,如下所示

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

我不想使用dbforge,因为纯sql速度更快,我必须尽可能编写轻量级的程序,但我们使用
dbforge
在codeigniter中创建表。如果您认真地争论纯sql与dbforge相比,5位小数的速度性能差异,那么为什么首先要使用框架?我听说纯PHP比CodeIgniter快!试试这个,我已经为此编写了一个库,可以通过CLI非常轻松地使用它。它可用于创建迁移文件和向后或向前运行迁移。