问题是LOAD DATA LOCAL INFILE在phpmyadmin中工作,但当我在php中尝试时给出致命错误。
在phpmyadmin中我的行是这样的
LOAD DATA LOCAL INFILE 'e:/sam.csv' INTO TABLE `test` FIELDS TERMINATED BY ',' LINES TERMINATED BY 'rn' (`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 'rn' (`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 'rn' (`aa`, `bb`, `cc`)";
if (!($stmt = $db->query($query))) {
echo "nQuery execute failed: ERRNO: (" . $db->errno . ") " . $db->error;
};