【问题标题】:uploading csv to database table using php使用php将csv上传到数据库表
【发布时间】: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。看到很多人为此用头撞桌子。

标签: php database csv


【解决方案1】:

看到您可能没有收到关于您的问题下留下的 cmets 的通知,或者您是否已阅读它们,请改为在答案区域提交以下内容。

@dummy,) 中的尾随逗号不应存在。

使用die(mysql_error($connect)) 会引发语法错误,而不是使用通用的回显文本。


旁注:当然希望这不是一个糟糕的粘贴/错字。

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 1970-01-01
    • 2019-03-25
    • 2013-06-13
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多