duancan2539 2017-06-12 06:37
浏览 72

php和pdo跳过一些记录插入

I am fetching rows from a CSV file but while inserting, some records were skipped. What is the solution for that?

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条回答 默认 最新

  • doudong2149 2017-06-12 06:50
    关注

    Typically with PDO you have to store results of calls to query(), etc. and call the methods on the returned prepared statements...

    query() returns a PDOStatement object so save that in a variable, e.g. $statement, and then call methods like rowCount() on that variable:

    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();
        }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)