PHP加载数据Infile无法正常工作

时间:2017-05-22 09:01:58

标签: php mysql csv

我还是新手。我试图在php脚本上使用mysql LOAD DATA INFILE来加载csv文件。它既不会给出任何错误,也不会加载任何数据。有人可以帮帮我吗?我正在使用以下PHP代码

<?php

$db1=mysql_connect('localhost', 'root', '');
mysql_select_db('student',$db1);

$query = "LOAD DATA INFILE 'mysqlresults.csv' INTO TABLE student.student_info FIELDS TERMINATED BY ','";

$result = mysql_query($query);
if ($result == true){
echo 'success';
}
else{
echo 'not success';
}
?>

2 个答案:

答案 0 :(得分:1)

您需要设置文件的路径

LOAD DATA LOCAL INFILE '/path/to/your/local/file' INTO TABLE 

mysql与php脚本运行时的位置不同,因为mysql会查找自己的路径位置,并且找不到该文件(因为它位于其他地方)。

您可以在php中使用__DIR__来获取php正在运行它的当前位置,因此查询看起来像$query = "LOAD DATA INFILE ". __DIR__ . DIRECTORY_SEPARATOR . "'mysqlresults.csv' INTO TABLE student.student_info FIELDS TERMINATED BY ','";

DIRECTORY_SEPARATOR导致DIR没有尾部斜杠

答案 1 :(得分:0)

您的PHP代码使用MySQL扩展作为MySQL服务器的客户端。这两个组件(PHP和MySQL服务器)多次在不同的计算机上运行。

LOAD DATA INFILE从运行MySQL服务器的计算机上的CSV文件加载数据。

我认为您的文件位于运行PHP脚本的计算机上(即在运行MySQL客户端的计算机上)。

LOAD DATA INFILE命令的LOCAL选项告诉MySQL客户端从运行它的计算机上的文件(“本地”计算机)加载数据并将其发送到服务器以进行加载

对于该命令的两个版本,如果文件名不包含路径,则MySQL客户端或服务器使用其配置来知道在哪里搜索文件(事实证明它通常无法在那里找到它,因为开发人员不知道/不关心该配置并将文件放在其他地方。)

解决方案非常简单:始终使用文件的绝对路径。如果文件是本地的(在涉及PHP时99.99%的情况下会发生这种情况)那么您可以使用PHP魔术常量__DIR__和函数dirname()来构建{{1的绝对路径从包含代码的脚本的位置开始的文件。

从你的代码看来,CSV文件似乎与PHP文件位于同一目录中(这不是一个好习惯)。代码应该是这样的:

CSV