2016-11-17 51 views
1

這是一個非常奇怪的問題,我有,我不明白是什麼導致它。PHP:導入MYSQL的CSV總是小於CSV文件中實際的行數?

基本上,問題是我在PHP中有一個簡單的上傳功能,上傳CSV文件,然後將每行導入到MYSQL數據庫中。

現在,問題是我在我的CSV文件中有大約200+行,但是當我使用我的PHP頁面上載並將其導入MYSQL時,我只能在158 of them imported附近找到並且我根本沒有得到任何錯誤所以我不明白是什麼導致了這一點。

我有另一個CSV文件,其中有大約300+ rows,當我上傳/導入這個CSV文件時,我將270 rows imported轉換爲MYSQL。

這就像導入功能總是短几行,我根本不理解它。

這是我的PHP導入代碼:

error_reporting(-1); 
ini_set('display_errors', 'On'); 

if (isset($_POST['UP'])) { 

include "config/connect.php"; 

$imp= $_FILES["csv"]["name"];            
move_uploaded_file($_FILES["csv"]["tmp_name"],"imports/$imp"); 



// path where your CSV file is located 
//////////////////////////////////////////////////////// 
define('CSV_PATH',''); 

// Name of your CSV file 
$csv_file = CSV_PATH . "imports/".$imp.""; 
$i = 0; 

set_time_limit(10000); 


$fp = fopen("imports/".$imp."", "r"); 

while(!feof($fp)) { 
    if(!$line = fgetcsv($fp, 1000, ',', '"')) { 
    continue; 
    } 
    $sql0 = "INSERT INTO `myTable`(`column1`) VALUES('".$line[0]."')"; 
    $query0 = mysqli_query($db_conx, $sql0); 

} 

fclose($fp); 

    printf("<script>location.href='mypage.php'</script>"); 
    exit(); 
} 

使用直接導入到MYSQL是毫無疑問的,由於安全問題/孔..

可能有人請就這個問題諮詢?

任何幫助,將不勝感激。

+1

當我調試代碼時,我總是使用echo來找出是否執行了代碼的一部分......例如,在代碼中的'continue;'之上,如果我發現它沒有執行mysqli_query,然後我將'echo「繼續」;'...只是爲了查看while循環是否繼續而不執行查詢。如果它不回顯「繼續」,那麼嘗試使用'mysqli_error();' – 2016-11-17 18:22:30

+0

我應該遵循Hallur的建議。另外,用'fgetcsv($ fp)'替換這個'fgetcsv($ fp,1000,',',''')'看看會發生什麼。 –

+1

你能檢查文件是否完全導入嗎?在循環中每行打印一列而不將其插入到數據庫中?並且如果循環到達最後一行?我可能的猜測是您超過了文件的最大上載大小,因此某些部分被剪切了? –

回答

1

爲了解決引用問題,您希望使用帶有bind_param的預準備語句。

程序風格:

$stmt = mysqli_prepare($db_conx, "INSERT INTO `myTable`(`column1`) VALUES(?)"); 
mysqli_stmt_bind_param($stmt, 's', $line[0]); 
mysqli_stmt_execute($stmt); 

面向對象的風格:

$stmt = $mysqli->prepare("INSERT INTO `myTable`(`column1`) VALUES(?)"); 
$stmt->bind_param('s', $line[0]); 

$stmt->execute(); 

docs,用s字符串,i爲整數,d雙打/小數。