问题是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()
通常,如果您错误拼写表名或列,则会发生此错误,因此我不明白这一点。
任何帮助都将不胜感激。
答案 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;
};