将CSV文件写入SQL

时间:2015-01-24 01:05:54

标签: php mysql csv

希望有人可以帮助我,我认为这将是一些轻微的事情(我还在学习......)。我试图基于SQL数据库编写CSV文件服务器的全部内容,这是我目前拥有的代码。行// out完美写入并生成新记录。 $ar0值不会在名为order的表中生成任何条目 - 即使csv文件长约100行我也只是

  

错误:INSERT INTO order(Picker,Order_Number,Timestamp,System)值('''''''' &#39)

$file = "Pal.ORD.csv"; 
$tbl = "order"; 


$f_pointer=fopen("$file","r"); // file pointer

while(! feof($f_pointer)){
$ar=fgetcsv($f_pointer);
//$sql="INSERT INTO `order` (Picker,Order_Number,Timestamp,System)values ('Me','9999','23-01-2015','ORD')";
$sql="INSERT INTO `order` (Picker,Order_Number,Timestamp,System)values ('$ar[0]','$ar[1]','$ar[2]','$ar[3]')";

echo $sql;
echo "<br>";
}


if ($connect->query($sql) === TRUE) {
    echo "New records created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

2 个答案:

答案 0 :(得分:1)

我认为可能会发生的是,您的文件可能有一个空行/回车符作为文件中的最后一行,并使用该行将数据作为空白条目插入。

我无法100%确定这一点,因为您没有提供CSV文件的样本,但这是我的测试所揭示的。

基于以下CSV测试模型:(旁注:空行将被忽略)

a1,a2,a3,a4
b1,b2,b3,b4
c1,c2,c3,c4

使用以下内容并使用您自己的凭据替换。

这将根据我上面提供的模型为给定文件中的每一行创建一个新的条目/行。

<?php 
$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';

$db = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($db->connect_errno > 0) {
  die('Connection failed [' . $db->connect_error . ']');
}

$file = "Pal.ORD.csv";
$delimiter = ',';
if (($handle = fopen("$file", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
        foreach($data as $i => $content) {
            $data[$i] = $db->real_escape_string($content);
        }
        // echo $data[$i].""; // test only not required
        $db->query("INSERT INTO `order` 
                      (Picker, Order_Number, Timestamp, System)
                      VALUES ('" . implode("','", $data) . "');");
    }
    fclose($handle);
}

if($db){
echo "Success";
}

else {
    echo "Error: " . $db->error;
}

答案 1 :(得分:0)

快速浏览一下,似乎是这样的:

$f_pointer=fopen("$file","r"); // file pointer

应该是这样的:

$f_pointer=fopen($file,"r"); // file pointer

您可能没有从文件中读取任何内容。您可以尝试输出文件内容以查看该部分是否正常工作,因为您已确认可以插入数据库。