LOAD DATA LOCAL INFILE会产生致命错误,但可以在phpmyadmin中运行

时间:2016-10-10 18:20:27

标签: php mysqli

问题是LOAD DATA LOCAL INFILE在phpmyadmin中有效,但在php中尝试时会出现致命错误。

在phpmyadmin中我的行就是这个。

LOAD DATA LOCAL INFILE 'e:/sam.csv' INTO TABLE `test` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' (`aa`, `bb`, `cc`)

并且在大约3秒内插入了200000行。 在php中我尝试了这个:

$dbname="test";
$db = new mysqli('localhost','root','',$dbname);
mysqli_set_charset($db, 'utf8');
if($db->connect_errno){
    die('There is a problem connecting.');
}


echo "Starting";
        $query="LOAD DATA LOCAL INFILE 'e:/sam.csv' INTO TABLE `test` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' (`aa`, `bb`, `cc`)";
        $stmt = $db->prepare($query);
        echo '<br>'.$query;
        $stmt->execute();
        if (!$stmt) {throw new Exception($db->error);}
echo "Ending";

不幸的是,每次都会给我一个致命的错误。 有一个名为test的表,字段名称是正确的。

错误是

  

致命错误:在非对象

上调用成员函数execute()

通常,如果您错误拼写表名或列,则会发生此错误,因此我不明白这一点。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我有一个答案,但不是我想要的答案。显然,LOAD DATA LOCAL INFILE不适用于准备好的声明。

同样好消息是数据不需要消毒,因为它是以文本或数字导入的,并且是安全的。

$query="LOAD DATA LOCAL INFILE 'e:/sam.csv' INTO TABLE `test` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' (`aa`, `bb`, `cc`)";
if (!($stmt = $db->query($query))) {
        echo "\nQuery execute failed: ERRNO: (" . $db->errno . ") " . $db->error;
};