php和pdo跳过一些记录插入

时间:2017-06-12 06:37:07

标签: php pdo row

我从CSV文件中提取行,但在插入时,会跳过一些记录。解决方案是什么?

while(($line = fgetcsv($file, 10000, ",")) !== FALSE){

            $total_data++;
             $sql="SELECT id FROM customers WHERE id ='".$line[0]."'";
            $db->query(  $sql);

            $check = $db->resultset();
            $num = $db->rowCount();

            if($num > 0){
                $update_data++;
                //$db->query("UPDATE customers SET name = :name, phone=:phone where id=:id");
                $db->bind(':name', $line[1]);
                $db->bind(':phone', $line[2]);
                $db->bind(':id', $line[0]);
                $db->execute();

            }else{
                   $insert_data++;
                $db->query("INSERT INTO customers(id,name,phone) VALUES (:id,:name,:phone)");
                    $db->bind(':id',$line[0]);
                    $db->bind(':name', $line[1]);
                    $db->bind(':phone', $line[2]);
                    $db->execute();
            }
        }

1 个答案:

答案 0 :(得分:0)

通常使用PDO,您必须将调用结果存储到query()等,并在返回的预准备语句中调用方法...

query()会返回PDOStatement个对象,因此请将其保存在变量中,例如$statement,然后在该变量上调用rowCount()之类的方法:

while(($line = fgetcsv($file, 10000, ",")) !== FALSE){
    $total_data++;
    $sql="SELECT id FROM customers WHERE id ='".$line[0]."'";
    $statement = db->query(  $sql);

    $check = $statement->resultset();
    $num = $statement->rowCount();

    if($num > 0){
        $update_data++;
        $updateStatement = $db->query("UPDATE customers SET name = :name, phone=:phone where id=:id");
        $updateStatement->bind(':name', $line[1]);
        $updateStatement->bind(':phone', $line[2]);
        $updateStatement->bind(':id', $line[0]);
        $updateStatement->execute();

    }else{
        $insert_data++;
        $insertStatement = db->query("INSERT INTO customers(id,name,phone) VALUES (:id,:name,:phone)");
        $insertStatement->bind(':id',$line[0]);
        $insertStatement->bind(':name', $line[1]);
        $insertStatement->bind(':phone', $line[2]);
        $insertStatement->execute();
    }
}