php - 如何使用pdo驱动程序从php中的本地文件加载数据

标签 php mysql pdo load-data-infile

我有一个函数需要将数据从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不再是一个表名,它只是一个带有字母as等的字符串...

标识符必须用反引号引起来:

... INTO table `asta` ...
               ^----^---

关于php - 如何使用pdo驱动程序从php中的本地文件加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27253914/

相关文章:

php - 如何为 PHP 包含文件设置根文件夹

java - 将文件上传到服务器保存的文件包含无效字符

mysql - 如何使用 WHERE 子句获取整列数据并将其放入另一列中?

php - while()中的数据如何划分?

php - 使用有限的内存处理来自 mysql 的大型结果集

php - 无法在 Codeigniter 中加载请求的文件 : header. php

php - 保留管理页面来管理数据库是否危险?

php - 在表格中显示 XML 内容 + 使用 php 轻松搜索

php - 从我页面的第二个表中删除行的问题

PHP PDO -> 准备好的查询返回错误(相同的查询未准备好工作)