Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP CSV导入脚本时被错误包围_Php_Mysql_Csv - Fatal编程技术网

使用PHP CSV导入脚本时被错误包围

使用PHP CSV导入脚本时被错误包围,php,mysql,csv,Php,Mysql,Csv,我有CSV文件,需要导入到MySQL数据库。我正在使用PHP脚本导入CSV 脚本工作正常,直到我添加一个封闭的BY语句,我之所以添加该语句,是因为CSV列中的一个值包含带逗号的文本,但该值用引号括起来 以下是CSV列的一个示例,其中包含用引号括起来的值: ,“1名注册管理员,完整维修记录,中控锁,电动车窗,电动后视镜,ABS,牵引力控制,气候控制,动力转向,驾驶员安全气囊,乘客安全气囊,侧气囊,巡航控制,报警器,防盗器,半真皮内饰,合金车轮” 以下是我尝试使用的脚本: <?php $dat

我有CSV文件,需要导入到MySQL数据库。我正在使用PHP脚本导入CSV

脚本工作正常,直到我添加一个封闭的BY语句,我之所以添加该语句,是因为CSV列中的一个值包含带逗号的文本,但该值用引号括起来

以下是CSV列的一个示例,其中包含用引号括起来的值:

,“1名注册管理员,完整维修记录,中控锁,电动车窗,电动后视镜,ABS,牵引力控制,气候控制,动力转向,驾驶员安全气囊,乘客安全气囊,侧气囊,巡航控制,报警器,防盗器,半真皮内饰,合金车轮”

以下是我尝试使用的脚本:

<?php
$databasehost = "localhost"; 
$databasename = "import"; 
$databasetable = "import"; 
$databaseusername="import"; 
$databasepassword = "password"; 
$fieldseparator = ","; 
$lineseparator = "\n";
$enclosedbyquote = '"';
$csvfile = "test.csv";

if(!file_exists($csvfile)) {
    die("File not found. Make sure you specified the correct path.");
}

try {
    $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", 
        $databaseusername, $databasepassword,
        array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        )
    );
} catch (PDOException $e) {
    die("database connection failed: ".$e->getMessage());
}

$pdo->exec("TRUNCATE TABLE `$databasetable`");

    $affectedRows = $pdo->exec("
    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." REPLACE INTO TABLE `$databasetable`
    ENCLOSED BY ".$pdo->quote($enclosedbyquote)."
    FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)." 
    LINES TERMINATED BY ".$pdo->quote($lineseparator)." 
    IGNORE 1 LINES");

echo "Loaded a total of $affectedRows records from this csv file.\n";

?>

我得到一个错误:(


如果您知道我做错了什么,请提供任何提示!?

看起来您的字符周围缺少引号:

ENCLOSED BY '".$pdo->quote($enclosedbyquote)."'

你应该看一下。你需要把
字段
放在word的前面

而不是

ENCLOSED BY ".$pdo->quote($enclosedbyquote)."
    FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)." 
你应该:

FIELDS ENCLOSED BY ".$pdo->quote($enclosedbyquote)."
     TERMINATED BY ".$pdo->quote($fieldseparator)." 

并非所有字段都是封闭的,因此您应该改用“可选封闭方式”。您得到了什么错误?我现在只剩下这个错误:(致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解使用near的正确语法'\在/home/dealerby/public_html/driven_import.php:35堆栈跟踪:#0/home/dealerby/public_html/driven_import.php(35):PDO->exec('???LOAD DATA LOC…')#1{main}中的第2行中,''字段终止于','行终止于'\n'忽略1行'在第35行的/home/dealerby/public\u html/driven\u import.php中抛出,那么您现在的查询是什么?您是否删除了由括起来的
?我在这个查询中没有看到它?我正在使用这个查询:$affectedRows=$pdo->exec(“加载数据本地填充”。$pdo->quote($csvfile)。“替换为表
$databasetable
字段,可选地由
括起来”.$pdo->quote($enclosedbyquote)。“字段以“$pdo->quote($fieldseparator)”结尾。行以“$pdo->quote($lineseparator)”结尾。“忽略1行”);不要使用
字段
2次。它们只能作为
字段使用一次,可以选择由…括起来,以…终止。
而不是
字段,可以选择由…括起来,以…终止。
ENCLOSED BY ".$pdo->quote($enclosedbyquote)."
    FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)." 
FIELDS ENCLOSED BY ".$pdo->quote($enclosedbyquote)."
     TERMINATED BY ".$pdo->quote($fieldseparator)."