2016-01-21 42 views
1

我在將數據記錄從CSV文件插入到mysql數據庫時遇到了錯誤。我有一個腳本,工作正常。它從CSV文件插入數據到MySQL數據庫。它有大約40,000條記錄。但是在運行該腳本之後,它只能插入大約1000條記錄,並且沒有錯誤地停止。可能是什麼問題?請幫忙。從csv到mysql數據庫的不完全插入php

下面是我插入數據的腳本。

include('dbconnection.php'); 
if (($handle = fopen("hotels.csv", "r")) !== FALSE) { 
    $flag = true; 
    $id=1; 

    while (($data = fgetcsv($handle, 100000000, ",")) !== FALSE) { 
     if($flag){ 
      $flag = false; 
     continue; 
     }  
     $hotelid = mysql_real_escape_string($data[0]); //var_dump($hotelid); exit(); 
     $hotelname = mysql_real_escape_string($data[1]); 
     $address1 = mysql_real_escape_string($data[2]); 
     $address2 = mysql_real_escape_string($data[3]); 
     $country = mysql_real_escape_string($data[4]); 
     $city = mysql_real_escape_string($data[5]); 
     $postcode = mysql_real_escape_string($data[6]); 
     $telephone = mysql_real_escape_string($data[7]); 
     $hotelfax = mysql_real_escape_string($data[8]); 
     $hotelemail = mysql_real_escape_string($data[9]); 
     $longitude = mysql_real_escape_string($data[10]); 
     $latitude = mysql_real_escape_string($data[11]); 
     $website = mysql_real_escape_string($data[12]); 
     $location = mysql_real_escape_string($data[13]); 
     $description = mysql_real_escape_string($data[14]); 
     $starrating = mysql_real_escape_string($data[15]); 
     $statecode = mysql_real_escape_string($data[16]); 

     $select_query = "SELECT * FROM `hotelDB`.`hotels` WHERE `hotelid` = $hotelid"; 

     if(mysql_query($select_query) != '$hotelid'){ 


      $sql = "INSERT IGNORE INTO `hotelDB`.`hotels` (`id`,`hotelid`, `hotelname`, `address1`,`address2`,`country`,`city`,`postcode`,`telephone`,`hotelfax`,`hotelemail`,`longitude`,`latitude`,`website`,`location`,`description`,`starrating`,`statecode`) VALUES ('$id','$hotelid', '$hotelname', '$address1','$address2', '$country', '$city', '$postcode', '$telephone', '$hotelfax', '$hotelemail', '$longitude', '$latitude', '$website', '$location', '$description', '$starrating', '$statecode')"; 
      echo $sql; 

      $retval = mysql_query($sql,$conn); 

      if(! $retval) 
      { 
       die('Could not enter data: ' . mysql_error()); 
      } 
      echo "<p style='color: green;'>Entered data having id = " .$id. " successfully</p><br>";  
      $id++; 

     } 
    } 
    echo "<br><p style='color: orange;'>Congratulation all data successfully inserted</p>"; 
    fclose($handle); 
} 
mysql_close($conn);` 

插入一些值後插入停止。這是代碼停止執行的示例屏幕截圖。 enter image description here

回答

0

您可以使用多行INSERT嘗試一個查詢。在下面的示例中,我將插入500行並插入一個查詢。您可以將其更改爲1000.

<?php 
include('dbconnection.php'); 
if (($handle = fopen("grnconnect-dump-hotels.csv", "r")) !== FALSE) { 
    //var_dump($handle); 
    $flag = true; 
    $id=1; 
    $counter=0; 
    $sql = "INSERT IGNORE INTO `hotelDB`.`hotels` (`id`,`hotelid`, `hotelname`, `address1`,`address2`,`country`,`city`,`postcode`,`telephone`,`hotelfax`,`hotelemail`,`longitude`,`latitude`,`website`,`location`,`description`,`starrating`,`statecode`) VALUES"; 
    $saveString=""; 
    while (($data = fgetcsv($handle, 100000000, ",")) !== FALSE) { 
     //var_dump($data); exit(); 
     if($flag){ 
      $flag = false; 
     continue; 
     }  
     $hotelid = mysql_real_escape_string($data[0]); //var_dump($hotelid); exit(); 
     $hotelname = mysql_real_escape_string($data[1]); 
     $address1 = mysql_real_escape_string($data[2]); 
     $address2 = mysql_real_escape_string($data[3]); 
     $country = mysql_real_escape_string($data[4]); 
     $city = mysql_real_escape_string($data[5]); 
     $postcode = mysql_real_escape_string($data[6]); 
     $telephone = mysql_real_escape_string($data[7]); 
     $hotelfax = mysql_real_escape_string($data[8]); 
     $hotelemail = mysql_real_escape_string($data[9]); 
     $longitude = mysql_real_escape_string($data[10]); 
     $latitude = mysql_real_escape_string($data[11]); 
     $website = mysql_real_escape_string($data[12]); 
     $location = mysql_real_escape_string($data[13]); 
     $description = mysql_real_escape_string($data[14]); 
     $starrating = mysql_real_escape_string($data[15]); 
     $statecode = mysql_real_escape_string($data[16]); 

     if(trim($counter)=="500") { 
      $sql = $sql.''.rtrim($saveString,","); 
      echo $sql;echo "<br /";    
      mysql_query($sql); 
      $counter=0; 
      $saveString=""; 
     }   
     $saveString .="('".$id."','".$hotelid."', '".$hotelname."', '".$address1."','".$address2."', '".$country."', '".$city."', '".$postcode."', '".$telephone."', '".$hotelfax."', '".$hotelemail."', '".$longitude."', '".$latitude."', '".$website."', '".$location."', '".$description."', '".$starrating."', '".$statecode."'),"; 
     $counter++;   


    } 
    if(trim($saveString)!=='') { 
     $sql = $sql.''.rtrim($saveString,","); 
     echo $sql;echo "<br /";    
     mysql_query($sql); 
    } 
    echo "<br><p style='color: orange;'>Congratulation all data successfully inserted</p>"; 
    fclose($handle); 
} 
mysql_close($conn); 
?> 
+0

請檢查上面的代碼中是否有多行INSERT的查詢。在您的選擇查詢中也用字段名稱替換*。 –

+0

它插入任何@Chauhan。運行腳本後,什麼都沒顯示,看着數據庫,它沒有數據 – vijayrana

+0

echo $ sql檢查查詢 –