Php Codeigniter 3迁移sql
我在应用程序中使用Codeigniter 3框架,并使用迁移库。我写了一个对象,它创建了一个“用户类型”表,并插入到三行中 代码如下: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 ,
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非常轻松地使用它。它可用于创建迁移文件和向后或向前运行迁移。