我一直在尝试这一段时间,并调查尽可能多的渠道,因为我可以在此之前问我的第一个问题。php LOAD数据本地INFILE csv到mysql
我有一个非常简单的csv文件。一列,由linux换行符分隔的数据。我想将它导入到表(代码)的第二列(密码)中。第一列是主键自动递增。
下面是简单的CSV数据(Linux的换行 - \ n)的
A12345678911
A12345678912
A12345678913
A12345678914
这里聚集文件的形式。
<form enctype="multipart/form-data" action="upload_webcodes.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
<input type="hidden" name="success" value="success" />
Send this file: <input name="webcodeupload" type="file" />
<input type="submit" value="Send File" />
</form>
下面是试图运行查询将tmp文件加载到数据库中的php。
<?php
function dbconnect(){
$db = mysql_connect('localhost', 'root', 'root');
mysql_select_db("mydatabase", $db);
return $db;
}
if ($_FILES['upload']['type'] === 'text/csv') {
$database = dbconnect();
$getfile = $_FILES['upload']['tmp_name'];
$sql = " LOAD DATA LOCAL INFILE $getfile INTO TABLE codes (`passcode`) LINES TERMINATED BY '\n' ";
mysql_query($sql);
}
?>
我不能得到它的工作。我正在用MAMP在本地尝试。/tmp/php文件夹修改日期得到更新,但我看不到文件。我甚至尝试过更大的文件,因为我的测试文件非常简单。 提交表单后,我已打印出$ _FILES数组。
Array
(
[webcodeupload] => Array
(
[name] => Aimport.csv
[type] => text/csv
[tmp_name] => /Applications/MAMP/tmp/php/phpsp9ezx
[error] => 0
[size] => 52
)
)
看来预期的结果是在那里?我试过了phpmyAdmin中的查询,如果我删除了LINES TERMINATED BY子句,它就可以工作。我怀疑这是一个phpmyAdmin的事情,我也试过这个代码,在查询中有和没有这个子句。
此外,加载页面时还会出现一些“未定义索引”错误。我有点理解为什么,并且在这里阅读了线索,指出了掩盖错误的方法,但我很想知道如何避免它们而不是隐藏它们。
任何输入,将不胜感激。
谢谢。
检查'mysql_query()'的返回值。负载查询可能会失败,但是您没有捕获任何返回值,这意味着您已经简单地认为它已成功。至少:'$ result = mysql_query(...)或死(mysql_error())'。 – 2013-02-08 21:14:47
请参阅此问题的答案:http://stackoverflow.com/questions/6114651/php-mysql-load-data-infile-help – freejosh 2013-02-08 21:37:59