2015-12-11 4 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_type (id, name) VALUES (1, 'пользователь'), (2, 'поставщик')' в строке 4

CREATE TABLE user_type (id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT первичный ключ, name СИМ (120) NOT NULL) ДВИГАТЕЛЬ = ЬшоВВ; INSERT INTO user_type (id, name) 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

EDIT
В этом случае попробуйте разбить запрос как этого

$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

Если вы серьезно рассуждаете о разнице в производительности в 5 десятичных разрядов скорости, сравнивая чистый sql vs dbforge, зачем использовать фреймворк в первую очередь? Я слышал, что чистый PHP был быстрее, чем CodeIgniter! – colonelclick