php中使用load data local infile语句时解决的问题

原创 2018年01月04日 16:13:20

最近开发中须将csv文件导入到mysql中,听说用load data local infile导入效率较高,所以放弃使用fgetcsv等方法,而且这个方法不用我去open这个csv文件。但是按照用法在phpstorm+wamp环境中试了半天都不行,之前怀疑我的参数写错了,又排除了字段匹配、字符编码兼容等问题,

我的sql语句如下:

load data local infile $csv IGNORE into table $table CHARACTER SET utf8 fields terminated by ',' optionally enclosed by '\"' escaped by ','lines terminated by '\r\n' ignore 1 lines ;
在phpstorm中始终无法调试通过,奇怪的是当我换成phpmyadmin中用SQL功能测试,或者mysql>控制台测试,该语句都能成功执行。查看了很多网上的资料,仍然没有找到答案。
最后看到一个国外的论坛,按照其办法改进了才搞定了。期间被国内某些帖子误导了一下走了些弯路,现在说下解决办法:
1.在my.ini文件中,或者my.conf中在[mysql]和[mysqld]两个地方加上local-infile=1,如下:
[mysql]
local-infile=1

[mysqld]
local-infile=1
重启服务器
2.在程序中进行如下配置:
$conn = mysqli_init();
mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($conn,server,user,code,database);
我采用了面向对象的写法:
$this->mysqli = new mysqli($this->host, $this->user, $this->password);
      $result = $this->mysqli->set_opt(MYSQLI_OPT_LOCAL_INFILE, true);
      $result = $this->mysqli->real_connect($this->host,$this->user,$this->password,$this->database);
      if($this->mysqli->connect_error)
{
   die("Connect Server Failed:".$this->mysqli->error);
}
3.文件的路径写法phpstorm和SQL控制台和phpmyadmin有点区别,不能使用‘\’或者双斜杠‘\\’,而只能用‘/’,例如:
load data local infile 'C:/wamp64/Info.csv' REPLACE into table info12345 fields terminated by ',' optionally enclosed by '\"' escaped by '\"' lines terminated by '\r\n' ignore 1 lines"

ok,就这样搞定了。希望对也遇到这个问题的朋友有帮助

参考贴:
https://stackoverflow.com/questions/16739757/load-data-local-infile-command-not-allowed



load data local infile 与 load data infile 的区别与注意事项

命令:load data local infile “filename.txt” into table tbl_name; 说明:MySQl的版本不得低于3.22.15,否则load data lo...
  • YoungerChen
  • YoungerChen
  • 2012年08月18日 21:13
  • 3419

mysql导入文本数据LOAD DATA INFILE语法

mysql导入文本数据LOAD DATA INFILE语法 LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'...
  • jichl
  • jichl
  • 2013年11月12日 16:05
  • 1612

Java不写文件,LOAD DATA LOCAL INFILE大批量导入数据到MySQL的实现

大家都知道当插入大批量数据MySQL的时候, MySQL使用load data local infile 从文件中导入数据比insert语句要快,MySQL文档上说要快20倍左右。 但是这个方法有个缺...
  • chenyechao
  • chenyechao
  • 2013年07月03日 20:50
  • 10361

LOAD DATA INFILE语句导入数据进入MySQL的一些注意事项

可以用以下语句导入CSV或其他格式数据进入MySQL数据库,LOAD DATA LOCAL INFILE "C:\\wamp\\apps\\litigationinfo.csv" REPLACE I...
  • myslq
  • myslq
  • 2015年09月02日 12:41
  • 7817

load data infile 导入数据 中文显示乱码 解决方法

关于 load data infile 导入数据 中文显示乱码 解决方法  load data infile  'data.txt' into table test; 首先使用  show  ...
  • risingsun001
  • risingsun001
  • 2014年08月14日 13:17
  • 3890

Mysql中的load语句对null的处理

Mysql中的load语句对null的处理
  • oTengYue
  • oTengYue
  • 2016年11月22日 19:44
  • 1984

mysqltxt文件导入 load data infile 需要注意的地方

LOAD DATA INFILE 一直被认为是MySQL很强大的一个数据导入工具,因为他速度非常的快。 不过有几个问题一定要注意 1、编码。 2、灵活导入导出。我来举两个例子说明一下。 一、关...
  • zhezhebie
  • zhezhebie
  • 2017年02月22日 17:59
  • 264

mysql修改用户名密码和Load Data Local Infile的权限及用户自定义函数方法

mysql修改用户名密码 1.直接在数据库中修改记录 mysql> use mysql mysql> update user set password = password(”new_pa...
  • mike_caoyong
  • mike_caoyong
  • 2014年09月26日 22:26
  • 2056

Java不写文件,LOAD DATA LOCAL INFILE大批量导入数据到MySQL的实现

Mysql loaddata的使用           数据库中,最常见的写入数据方式是通过SQLINSERT来写入,另外就是通过备份文件恢复数据库,这种备份文件在MySQL中是SQL脚本,实际...
  • hy6688_
  • hy6688_
  • 2015年03月31日 19:40
  • 4538

MySQL _LOAD DATA 导入 csv 文件到数据库表操作日志

1.说明LOAD DATA INFILE语句用于高速地从一个文本文件中读取行,并装入一个表中。文件名称必须为一个文字字符串。标准语法:LOAD DATA LOCAL INFILE 'data.txt'...
  • csdn_yasin
  • csdn_yasin
  • 2016年07月11日 10:46
  • 1687
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:php中使用load data local infile语句时解决的问题
举报原因:
原因补充:

(最多只允许输入30个字)