我試圖導入一個相對較大的csv文件到我的數據庫(7500 +行,43列),我遇到了一些奇怪的錯誤。fgetcsv與MySQL:奇怪的錯誤
$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參數和我禁用我的表中的自動遞增選項
看來錯誤是在你的addLine方法。所以你應該讓我們看看這兩種形式的方法。 – VMai
你的主鍵是什麼?它只包含id或其他字段呢? – peppelauro
@peppelauro只有編號 – slayne