【问题标题】:PHP LOAD DATA INFILE VS FopenPHP LOAD DATA INFILE VS Fopen
【发布时间】:2026-01-09 04:10:01
【问题描述】:

我第二次尝试使用 LOAD DATA INFILE 将记录从 CSV 上传到 MySQL 数据库,但我在所有尝试中总是遇到错误,每次都有不同的错误,这就是为什么我宁愿使用原始的循环方式通过记录。

我的最后一个脚本:

<?php

//Connect to Database
$maindir = realpath(__DIR__);
include($maindir . '/connectme.php');

$queme = "LOAD DATA INFILE '" . $_FILES['fromfileupload']['tmp_name'] . "'
INTO TABLE thecardb
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"' 
LINES TERMINATED BY ',,,\\r\\n'
IGNORE 1 LINES 
(carid, carname, carbrand, carprice, carcolor)" ; 

if (mysqli_query($concon, $queme))
{
   echo "Success";
}
?>

我最近的错误是

Access denied for user '########_######'@'##.#.#.##' (using password: YES)

出于保密原因,我将部分错误替换为 #。

这对我来说一直很烦人,我相信部分问题是由于 php.ini 中的一些权限设置或我似乎无法访问或找到的其他 PHP 配置(我正在使用虚拟主机并且不在我自己的服务器上运行此站点)。我可以使用 fopen() 从 CSV 上传记录而不是使用 LOAD DATA INFILE 吗?我认为这是我现在可以工作的最简单的解决方案(使用 mysqli_multi_query)。我只处理大约 5000-10000 条记录。

【问题讨论】:

    标签: php mysql csv


    【解决方案1】:

    Erm... 我认为错误信息已经告诉你问题出在哪里了。

    访问被拒绝。

    你应该检查的几件事......

    1. 用户帐户和密码。它们是否正确?
    2. 该帐户是否有权访问该数据库?
    3. 该帐户是否有权访问您正在向其中加载数据的表?
    4. 该帐户是否有权运行加载数据命令?

    这应该涵盖了您现在需要检查的所有内容......

    【讨论】:

    • 谢谢你,但请阅读我的帖子,我已经意识到可能存在的安全问题。是的#1-#3,问题是#4,我再次为我的网站使用网络托管计划,访问某些配置,如 php.ini 对我来说是个问题。我的问题是,是否可以使用 fopen 或其他循环技术将 5000 条记录添加到数据库中,因为我打算这样做
    • 是的,没问题。只需创建一个prepared statement,然后通过fgetcsv 循环文件,将值分配给绑定参数(list() 在这里可能会有所帮助)并执行该语句。 5000 条记录……没什么 ;-)