使用CSV插入数据和/或更新数据库

时间:2013-06-20 11:06:40

标签: php mysql csv


所以我一直在研究这个问题,但我似乎无法弄清楚如何让它发挥作用。

如果产品ID在那里,我想更新数据库中产品的价格,如果不存在,我希望它插入新ID及其价格。

使用下面的代码更新数据库,但如果id不在那里,它不会插入任何内容。

关于出了什么问题的任何线索?

谢谢你 吉姆

修改

这对我有用:

$count = mysql_num_rows(mysql_query("SELECT id FROM products WHERE id = '$id'"));



            if ($count == 1){

            mysql_query("UPDATE products SET price='$price',ordprice='$ordprice' WHERE id='$id'");

            }elseif($count == 0){

            mysql_query("INSERT INTO products (id,price,ordprice) VALUES ('$id','$price','$ordprice')");
            }

/ EDIT

if(isset($_POST['submit']))
    {
        $file = $_FILES['file']['tmp_name'];

        $handle = fopen($file,"r");
        while(($fileop = fgetcsv($handle,10000,";")) !== false)
        {
            $id = $fileop[0];
            $price = $fileop[1];
            $ordprice = $fileop[2];


            $count = mysql_num_rows(mysql_query("SELECT id FROM products WHERE id = '$id'"));



            if ($count = $id){

            mysql_query("UPDATE products SET price='$price',ordprice='$ordprice' WHERE id='$id'");

            }elseif($id != $count){

            mysql_query("INSERT INTO products (id,price,ordprice) VALUES ('$id','$price','$ordprice')");
            }

2 个答案:

答案 0 :(得分:4)

乍一看,这一行:

 if ($count = $id){

总是等于true,所以请尝试:

 if ($count == $id){

但是,我认为count将始终返回1(如果没有找到记录则返回0)并且不会匹配csv中的id。

而是使用mysql_fetch_assoc从数据库中提取记录,并将数据库中的id字段与csv进行比较

答案 1 :(得分:1)

除了休·唐纳所说的,你还面临另一个问题。

您将mysql_num_rows返回的值分配给 $ count ,这似乎不是您想要的值。

您将 $ count $ id 进行比较,以确定它们是否匹配。如果我认为数据库中的id是唯一的, $ count 将永远不会是0或1。

所以试试这个:

if ($result = mysql_query("SELECT id FROM products WHERE id = $id")) {
    $row = mysql_fetch_array($result);
    $id2 = $row['id'];
}
else {
    $id2 = NULL;
}

if ($id == $id2) {
    // match found, do the insert magic
}
else {
    // update here
}