我还是新手。我试图在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';
}
?>
答案 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