1
CSVファイルから行をフェッチしていますが、挿入中に一部のレコードがスキップされました。その解決策は何ですか?phpとpdo挿入するレコードをスキップします
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();
}
}
が使用記録をチェックする条件挿入されているかどうかはい、次に何かの方法することができます。 – yogendra
はい[行数()](http://php.net/manual/en/pdostatement.rowcount.php)を使用する - 説明と例を読んでください。その例はDELETEクエリの場合がありますが、INSERTに適用されますクエリも同様です。 –
@yogendra per [rowCount()](http://php.net/manual/en/pdostatement.rowcount.php): "_ ** PDOStatement :: rowCount()**は影響を受ける行の数を返します対応するPDOStatementオブジェクトによって実行された最後のDELETE、INSERT、またはUPDATEステートメントによって実行されます。 "したがって、もしあなたが' $ insertStatement-> execute();を実行した後、私の答えの中のコードを見れば '$ insertStatement-> rowCount(); 'は、_INSERT_クエリの影響を受ける行の数を返す必要があります –