![](/img/trans.png)
[英]LOAD DATA LOCAL INFILE does not work from php 5.5 using PDO
[英]how to load data from local file in php with pdo driver
我有一个需要从csv文件将数据加载到mysql db中的函数,所以我写了一些代码:
try {
$pdo = new PDO('mysql:host=localhost;dbname=borsino_ittico',
'XXXXX', 'XXXXX',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
PDO::MYSQL_ATTR_LOCAL_INFILE => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
}
catch (PDOException $e) {
$mex= "database connection failed: ".$e->getMessage();
return $mex;
}
其他代码
try {
$affectedRows = $pdo->exec("
LOAD DATA LOCAL INFILE ".$pdo->quote($file)." INTO TABLE ".
$pdo->quote($dbTable)." FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n,\\n'");
$mex= "Loaded a total of $affectedRows records from this csv file.\n";
return $mex;
}
catch (PDOException $e) {
$mex= "ATTENZIONE, ERRORE CARICAMENTO DATI: ".$e->getMessage();
return $mex;
}
实际上,这似乎不起作用,并引发了异常:
SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以获取在asta字段终止符“;”附近使用的正确语法。 第1行以',\\ n''终止的行
第一个问题是关于$ file(资源):应该采用绝对/相对形式(例如c:\\ xxx \\ csvfile.csv或.. \\ xxx \\ csvfile.csv),或者我必须使用类似$csvFile=fopen($file,"r");
的函数来公开它$csvFile=fopen($file,"r");
然后,我是否应该在$ affectedRows查询中使用像$pdo->quote()
这样的pdo本机函数作为插入参数(例如文件,表名,分隔符,终止于的行)?
即使在某行上出现一些错误,我如何也可以强制执行查询?
您引用表格名称,产生
... INTO table 'asta' ...
'
引号把东西变成字符串。 因此asta
不再是表名,而只是一个带有字母a
, s
等的字符串。
标识符必须用反引号引起来:
... INTO table `asta` ...
^----^---
LINES TERMINATED BY '\n,\\n'
对我不起作用!!! 经过多次测试后,唯一的解决方案是删除双转义\\\\n
所以
`LINES TERMINATED BY '\n'`
即使我在某处读到了有关“转义” PHP的“ \\” simbol的需求,该方法仍然有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.