【发布时间】:2015-05-07 17:20:11
【问题描述】:
我对此很陌生,所以希望我不会在这里偏离基础:
我有一个名为 BT Database 的数据库,其中有一个名为 case_cases 的表。我希望能够使用 php 脚本自动将 .csv 文件上传到其中。我制作了一个 php 脚本和一个测试 csv 文件,将它们放在托管数据库的 XUbuntu 机器的桌面上。
我通过打开终端来测试它们,导航到桌面,然后使用 php -e (testimport.php) 运行脚本。我没有收到任何错误,只是一个空白行,所以它似乎运行正常,但是当我进入表格时,csv 中的数据尚未上传。谁能建议我在这里做错了什么?我的 php 脚本如下:
<?php
//connect to the database
$connect = mysql_connect("localhost","user","password")
or die("Could not connect.")
;
mysql_select_db("BT Database",$connect);
//get the csv file
$handle = fopen("import.csv","r")
or die("Couldn't find or open csv file")
;
//set up the query to load data into the table, then run it.
$loadcases = "LOAD DATA INFILE 'import.csv'
INTO TABLE cases_cases
FIELDS TERMINATED BY ''
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY ',,,\\r\\n'
IGNORE 1 LINES
(name, @dummy, case_specific_notes, type, initiation_date, @dummy,)"
or die("error loading file.")
;
mysql_query($loadcases)
;
?>
编辑 1: 按照大家的好建议,我删除了逗号,将我的脚本升级为 mysqli,并在我的脚本中调用了实际的 mysql 错误。这显示了一些以前看不见的问题,这些问题很容易解决。
但是,现在我遇到了与以前相同的问题,即它运行并且没有错误,但数据库表中没有任何显示。新脚本如下。有什么想法可能出了什么问题?
<?php
$mysqli = new mysqli("localhost","xampp","bt4521","BT Database");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$sql = "LOAD DATA INFILE 'sfimport/sfdumptest.csv' INTO TABLE cases_cases
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\\r\\n'
IGNORE 1 LINES
(name, @dummy, case_specific_notes, type, initiation_date, @dummy, @dummy)
";
//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;
};
?>
【问题讨论】:
-
你想得到错误,所以不要
or die("error loading file.")做or die(mysql_error($connect)) -
(name, @dummy, case_specific_notes, type, initiation_date, @dummy,)后面不应该有逗号。 -
除了已经说过的几点。首先,停止使用 mysql 库,因为它已被贬值,改用 mysqli 。其次,我过去在基于 debian 的操作系统和 LOAD DATA INFILE 方面遇到过问题。我强烈建议改用 LOAD DATA LOCAL INFILE 并确保在 php.ini 中启用它。第三,不太可能,检查并确保自动提交未设置为 false。看到很多人为此用头撞桌子。