是否可以通过Codeigniter运行一个长.sql文件?

时间:2016-08-01 17:42:34

标签: php mysql sql database codeigniter

我想在Codeigniter 3.1.0中从我的服务器运行.sql文件。我试过了

//code to create a DB & this is successful then following ocde 
$query = file_get_contents('./test.sql');
$this->db->query($query);

这是我的test.sql文件。 https://gist.github.com/rejoan/97dfae1b08116e386b3e6fda97eeb4f7

现在,当我运行它时,它始终显示错误

  

发生数据库错误

     

错误号码:1064

     

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   'CREATE TABLE user附近(id int(11)NOT NULL,test_id int(11)   NOT NULL,''在第10行

CREATE TABLE `test` 
( `id` int(11) NOT NULL, 
`name` varchar(250) NOT NULL, 
`description` text NOT NULL, 
`added` date NOT NULL, 
`outdate` date NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE `user` 
( `id` int(11) NOT NULL, 
`test_id` int(11) NOT NULL, 
`name` varchar(250) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

ALTER TABLE `test` ADD PRIMARY KEY (`id`), 
ADD UNIQUE KEY `name` (`name`);

ALTER TABLE `user` ADD PRIMARY KEY (`id`), 
ADD KEY `test_id` (`test_id`); 

ALTER TABLE `test` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=37; 

ALTER TABLE `user` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; 

ALTER TABLE `user` 
ADD CONSTRAINT `FK_user_test` FOREIGN KEY (`test_id`) 
REFERENCES `test` (`id`) ON UPDATE NO ACTION;
  

文件名:C:/xampp/htdocs/spider_clients/system/database/DB_driver.php

     

行号:691

那么如何通过问题解决这个问题呢?我有一个想法是通过PHP原始代码来做到这一点,但首先我想通过CI解决。有什么想法吗?

**即使我尝试用单引号替换所有反引号仍然不起作用

1 个答案:

答案 0 :(得分:3)

您无法通过API运行任何 SQL文件。即使您拆分文件并为每个API调用运行一个查询也不行。

有些命令可以出现在SQL文件中,但它们实际上是mysql client builtin commands。服务器中的SQL解析器无法识别这些命令。

分割SQL文件很棘手。有些SQL语句包含文字分号,如 r value 0 0.8 -2.6097 1 0.9 -2.6097 2 1.0 -2.6097 3 1.2 -2.6097 4 1.4 -2.6097 5 0.8 -2.6641 6 0.9 -2.6641 7 1.0 -2.6641 8 1.2 -2.6641 9 1.4 -2.6641 df3['grp'] = (df3['r'] ==.8).cumsum() grpd = dict(df3[['grp','value']][df3['r'] == 1].values) df3["value"] = df3["grp"].map(grpd) df3 = df3.drop('grp', axis=1) r value 0 0.8 -2.6097 1 0.9 -2.6097 2 1.0 -2.6097 3 1.2 -2.6097 4 1.4 -2.6097 5 0.8 -2.6641 6 0.9 -2.6641 7 1.0 -2.6641 8 1.2 -2.6641 9 1.4 -2.6641 。所以你需要更复杂的逻辑来分割文件,它不像preg_split('/;/', $query)

那么简单

另一个问题:你会发现提交一个"查询"除了SQL注释之外什么都不会导致错误。

此外,如果您的SQL文件太大,如果您使用CREATE TRIGGER,则会耗尽PHP的最大内存。

最重要的是,您将浪费大量时间开发此代码并尝试使其正常工作。您最好利用已经设计用于运行SQL脚本的工具:

file_get_contents()

另见: