2015-12-11 33 views
1

我爲我的應用程序使用Codeigniter 3框架,並使用遷移庫。我寫了一個創建'user_type'表的對象,並將其插入到三行中。Codeigniter 3 migrate sql

下面是代碼:

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服務器版本正確的語法使用 附近手冊 'INSERT INTO user_typeidname)VALUES(1, '用戶'),(2, '供應商')' 在第4行

CREATE TABLE user_typeid TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name CHAR(120)NOT NULL)ENGINE = InnoDB的; INSERT INTO user_typeidname)VALUES(1, '用戶'),(2, '提供者'),(3,'admin');

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

行號:18

的這個有趣的部分,是,如果我呼應$ SQL變量,並運行它在phpmyadmin,它運作良好。

+0

https://開頭github上。 com/AimalAzmi/codeigniter-migrations 試試這個,我已經爲此寫了一個庫,可以很容易地通過CLI使用。它可以用來創建遷移文件並向後或向前運行遷移。 –

回答

0

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

查看關於dbforge

編輯
在這種情況下,嘗試打破你這樣的查詢

$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

我不想使用dbforge,因爲純sql的速度更快,而且我必須寫作輕量級程序,盡我所能 – tthlaszlo

+0

但我們使用'dbforge'在codeigniter中創建表。 –

+0

如果你認真地爭論比較純sql與dbforge的5個小數位速度的性能差異,爲什麼首先使用框架?我聽說純PHP比CodeIgniter更快! – colonelclick