LOAD DATA LOCAL inffile给出致命错误,但在phpmyadmin中工作


LOAD DATA LOCAL INFILE gives fatal error, but works in phpmyadmin

问题是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秒内插入了20万行。在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()

如果你拼错了一个表名或列名,通常会出现这个错误,所以我不明白这个。

我有一个答案,但不是我一直在寻找的答案。显然,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;
};