您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用PHP / MySQL导入CSV数据-Mysqli语法

使用PHP / MySQL导入CSV数据-Mysqli语法

如果使用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...FILEMySQL文档

出于安全原因,在读取服务器上的文本文件时,这些文件必须位于数据库目录中,或者所有人都可以读取。另外,要在服务器文件上使用LOAD DATA INFILE,您必须具有FILE特权。请参见第6.2.1节“ MysqL提供的漏洞”。对于非LOCAL加载操作,如果将secure_file_priv系统变量设置为非空目录名称,则要加载的文件必须位于该目录中。

php 2022/1/1 18:48:24 有302人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶