fgetcsv与MySQL:奇怪的错误

时间:2014-07-17 14:02:05

标签: php mysql fgetcsv

我试图将一个相对较大的csv文件导入我的数据库(7500多行,43列),并且我遇到了一些奇怪的错误。

$file = fopen(APPLICATION_PATH."/../docs/data.csv", "r");

     while (($emapData = fgetcsv($file, 100000, ";")) !== FALSE)
     {


        $dataTable->addline($emapData[0] , .. , emapdata[42]);

     }
     fclose($file);

当我这样做时,我的文件被加载到我的数据库中两次(15k +行)。

但是,如果我从主键中删除自动增量功能并且我手动添加它(我也更改了我的addLine方法):

$file = fopen(APPLICATION_PATH."/../docs/data.csv", "r");
     $id=0;
     while (($emapData = fgetcsv($file, 100000, ";")) !== FALSE)
     {

        $dataTable->addline($id,$emapData[0] , .. , emapdata[42]);
        $id++;
     }
     fclose($file);

有时它有效会抛出完整性错误(主键已经存在)。

在这两种情况下,我真的不明白发生了什么。

编辑:

我的addLines方法(很抱歉):

第一个案例

public function addLine($idtopo, $oms, $voie_oms, $och_otu, $etat_och_otu, $fameqpta_och_otu, $fameqptb_och_otu, $voie_och_otu, $odu4, $etat_odu4, $fameqpta_odu4, $fameqptb_odu4, $voie_odu4, $odu3, $etat_odu3, $fameqpta_odu3, $fameqptb_odu3, $voie_odu3, $odu2, $etat_odu2, $fameqpta_odu2, $fameqptb_odu2, $voie_odu2, $odu1, $etat_odu1, $fameqpta_odu1, $fameqptb_odu1, $voie_odu1, $cat_supporte, $supporte, $etat_supporte, $produit, $utilisation, $com1_och_otn, $com2_och_otn, $com1_odu2, $com2_odu2, $com1_odu1, $com2_odu1, $com1_supporte, $com2_supporte, $srlg){

    $db= Zend_Db_Table::getDefaultAdapter();

    $sql="INSERT INTO `data`  (`idtopo`, `oms`, `voie_oms`, `och_otu`, `etat_och_otu`, `fameqpta_och_otu`, `fameqptb_och_otu`, `voie_och_otu`, `odu4`, `etat_odu4`, `fameqpta_odu4`, `fameqptb_odu4`, `voie_odu4`, `odu3`, `etat_odu3`, `fameqpta_odu3`, `fameqptb_odu3`, `voie_odu3`, `odu2`, `etat_odu2`, `fameqpta_odu2`, `fameqptb_odu2`, `voie_odu2`, `odu1`, `etat_odu1`, `fameqpta_odu1`, `fameqptb_odu1`, `voie_odu1`, `cat_supporte`, `supporte`, `etat_supporte`, `produit`, `utilisation`, `com1_och_otn`, `com2_och_otn`, `com1_odu2`, `com2_odu2`, `com1_odu1`, `com2_odu1`, `com1_supporte`, `com2_supporte`, `srlg`) values (           
                                                          '".$idtopo."',
                                                          '".$oms."',
                                                          '".$voie_oms."',
                                                          '".$och_otu."',
                                                          '".$etat_och_otu."',
                                                          '".$fameqpta_och_otu."',
                                                          '".$fameqptb_och_otu."',
                                                          '".$voie_och_otu."',
                                                          '".$odu4."',
                                                          '".$etat_odu4."',
                                                          '".$fameqpta_odu4."',
                                                          '".$fameqptb_odu4."',
                                                          '".$voie_odu4."',
                                                          '".$odu3."',
                                                          '".$etat_odu3."',
                                                          '".$fameqpta_odu3."',
                                                          '".$fameqptb_odu3."',
                                                          '".$voie_odu3."',
                                                          '".$odu2."',
                                                          '".$etat_odu2."',
                                                          '".$fameqpta_odu2."',
                                                          '".$fameqptb_odu2."',
                                                          '".$voie_odu2."',
                                                          '".$odu1."',
                                                          '".$etat_odu1."',
                                                          '".$fameqpta_odu1."',
                                                          '".$fameqptb_odu1."',
                                                          '".$voie_odu1."',
                                                          '".$cat_supporte."',
                                                          '".$supporte."',
                                                          '".$etat_supporte."',
                                                          '".$produit."',
                                                          '".$utilisation."',
                                                          '".$com1_och_otn."',
                                                          '".$com2_och_otn."',
                                                          '".$com1_odu2."',
                                                          '".$com2_odu2."',
                                                          '".$com1_odu1."',
                                                          '".$com2_odu1."',
                                                          '".$com1_supporte."',
                                                          '".$com2_supporte."',
                                                          '".$srlg."'
                                                        )";


  $db->exec($sql);
  $db->closeConnection();


}

第二案

public function addLine($id,$idtopo, $oms, $voie_oms, $och_otu, $etat_och_otu, $fameqpta_och_otu, $fameqptb_och_otu, $voie_och_otu, $odu4, $etat_odu4, $fameqpta_odu4, $fameqptb_odu4, $voie_odu4, $odu3, $etat_odu3, $fameqpta_odu3, $fameqptb_odu3, $voie_odu3, $odu2, $etat_odu2, $fameqpta_odu2, $fameqptb_odu2, $voie_odu2, $odu1, $etat_odu1, $fameqpta_odu1, $fameqptb_odu1, $voie_odu1, $cat_supporte, $supporte, $etat_supporte, $produit, $utilisation, $com1_och_otn, $com2_och_otn, $com1_odu2, $com2_odu2, $com1_odu1, $com2_odu1, $com1_supporte, $com2_supporte, $srlg){

    $db= Zend_Db_Table::getDefaultAdapter();

    $sql="INSERT INTO `data` (`id`, `idtopo`, `oms`, `voie_oms`, `och_otu`, `etat_och_otu`, `fameqpta_och_otu`, `fameqptb_och_otu`, `voie_och_otu`, `odu4`, `etat_odu4`, `fameqpta_odu4`, `fameqptb_odu4`, `voie_odu4`, `odu3`, `etat_odu3`, `fameqpta_odu3`, `fameqptb_odu3`, `voie_odu3`, `odu2`, `etat_odu2`, `fameqpta_odu2`, `fameqptb_odu2`, `voie_odu2`, `odu1`, `etat_odu1`, `fameqpta_odu1`, `fameqptb_odu1`, `voie_odu1`, `cat_supporte`, `supporte`, `etat_supporte`, `produit`, `utilisation`, `com1_och_otn`, `com2_och_otn`, `com1_odu2`, `com2_odu2`, `com1_odu1`, `com2_odu1`, `com1_supporte`, `com2_supporte`, `srlg`) values (             ".$id.",
                                                          '".$idtopo."',
                                                          '".$oms."',
                                                          '".$voie_oms."',
                                                          '".$och_otu."',
                                                          '".$etat_och_otu."',
                                                          '".$fameqpta_och_otu."',
                                                          '".$fameqptb_och_otu."',
                                                          '".$voie_och_otu."',
                                                          '".$odu4."',
                                                          '".$etat_odu4."',
                                                          '".$fameqpta_odu4."',
                                                          '".$fameqptb_odu4."',
                                                          '".$voie_odu4."',
                                                          '".$odu3."',
                                                          '".$etat_odu3."',
                                                          '".$fameqpta_odu3."',
                                                          '".$fameqptb_odu3."',
                                                          '".$voie_odu3."',
                                                          '".$odu2."',
                                                          '".$etat_odu2."',
                                                          '".$fameqpta_odu2."',
                                                          '".$fameqptb_odu2."',
                                                          '".$voie_odu2."',
                                                          '".$odu1."',
                                                          '".$etat_odu1."',
                                                          '".$fameqpta_odu1."',
                                                          '".$fameqptb_odu1."',
                                                          '".$voie_odu1."',
                                                          '".$cat_supporte."',
                                                          '".$supporte."',
                                                          '".$etat_supporte."',
                                                          '".$produit."',
                                                          '".$utilisation."',
                                                          '".$com1_och_otn."',
                                                          '".$com2_och_otn."',
                                                          '".$com1_odu2."',
                                                          '".$com2_odu2."',
                                                          '".$com1_odu1."',
                                                          '".$com2_odu1."',
                                                          '".$com1_supporte."',
                                                          '".$com2_supporte."',
                                                          '".$srlg."'
                                                        )";


  $db->exec($sql);
  $db->closeConnection();


}

基本上我只是添加了id参数,我在表格中禁用了自动增量选项

1 个答案:

答案 0 :(得分:0)

您可以尝试使用insert方法,而不是在addLine函数中使用exec:

$data = array(
'idtopo' => $idtopo
, 'oms' => $oms
, 'voie_oms' => $voie_oms
...
);

$db->insert('data', $data);