如果使用MysqLi_query
-而不是MysqLi->prepare
..-> execute(); 这应该工作。
所以:
//Connect as normal above
$sql = "LOAD DATA INFILE '/myfile.csv' INTO TABLE tab"
. " FIELDS TERMINATED BY ','"
. " LINES TERMINATED BY '\r\n'"
. " IGNORE 1 LINES";
//$sql="DELETE FROM dbase";
// $stmt = $MysqLi->query($sql);
// Integrate other posters good recc to catch errors:
//Try to execute query (not stmt) and catch MysqLi error from engine and PHP error
if (!($stmt = $MysqLi->query($sql))) {
echo "\nQuery execute Failed: ERRNO: (" . $MysqLi->errno . ") " . $MysqLi->error;
}
对于var_dump($ MysqLi)仍然有用,在这里可以看到结果拒绝访问,因为在我的环境中,我们不允许LOAD FILE,但这告诉我引擎已成功解析并尝试执行查询。
您需要获取更好的错误信息,这可能会继续,这是我要研究的方法:
$sql = "LOAD DATA INFILE ...";
echo $sql;
$stmt=$MysqLi->prepare($sql);
// NOTE HERE WE'RE DUMPING OUR OBJ TO SEE THAT IT WAS
// CREATED AND STATUS OF PREPARE AND THEN KILLING SCRIPT
var_dump($MysqLi);
exit();
object(MysqLi)#1 (18) {
...
string(68) "This command is not supported in the
prepared statement protocol yet"
PHPMyAdmin非常漂亮,它的工作原理与MysqLi / PHP完全不同。
从MysqL文档中解决以下内容,并阅读本节内容。就像我说的那样,LOAD..FILE是一个非常敏感的操作,有很多限制。LOAD...FILE
MySQL文档
出于安全原因,在读取服务器上的文本文件时,这些文件必须位于数据库目录中,或者所有人都可以读取。另外,要在服务器文件上使用LOAD DATA INFILE,您必须具有FILE特权。请参见第6.2.1节“ MysqL提供的漏洞”。对于非LOCAL加载操作,如果将secure_file_priv系统变量设置为非空目录名称,则要加载的文件必须位于该目录中。