我有一个函数需要将数据从csv文件加载到mysql数据库中,所以我写了一些代码:
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]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''asta' FIELDS TERMINATED BY ';' LINES TERMINATED BY ' ,\n'' at line 1
第一个问题是关于 $file (资源):
应该是绝对/相对形式(如 c:\xxx\csvfile.csv 或 ..\xxx\csvfile.csv),或者我必须使用诸如 $csvFile=fopen($file,"之类的函数来公开它r");
然后,我应该使用 pdo native 函数(例如 $pdo->quote()
)在 $affectedRows 查询上插入参数(例如文件、表名、分隔符、终止行)吗?
即使某些行出现一些错误,如何强制执行查询?
最佳答案
你引用你的表名,产生
... INTO table 'asta' ...
'
- 引号将内容转换为字符串。所以asta
不再是一个表名,它只是一个带有字母a
、s
等的字符串...
标识符必须用反引号引起来:
... INTO table `asta` ...
^----^---
关于php - 如何使用pdo驱动程序从php中的本地文件加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27253914/