我试图将一个相对较大的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参数,我在表格中禁用了自动增量选项
答案 0 :(得分:0)
您可以尝试使用insert方法,而不是在addLine函数中使用exec:
$data = array(
'idtopo' => $idtopo
, 'oms' => $oms
, 'voie_oms' => $voie_oms
...
);
$db->insert('data', $data);