簡體   English   中英

PHP中MYSQL的LOAD DATA INFILE方法

[英]LOAD DATA INFILE Method for MYSQL in PHP

我想通過php將存儲在.csv文件中的數據導入mysql。 LOAD DATA INFILE查詢似乎不起作用,我設法編寫了一個將一個接一個地導入記錄的代碼。 這是代碼:

<?php

$arr = array(array(),array());
$num = 0;
$row = 0;
$handle = fopen("./import.csv", "r");


while($data = fgetcsv($handle,1000,",")){   
    $num = count($data);
    for ($c=0; $c < $num; $c++) {
            $arr[$row][$c] = $data[$c];
    }
    $row++;
}


$con = mysql_connect('localhost','root','password22');
mysql_select_db("security",$con);

for($i=1; $i<$row; $i++){
$sql = "INSERT INTO sls VALUES ('".$arr[$i][0]."','".$arr[$i][1]."','".$arr[$i][2]."','".$arr[$i][3]."','".$arr[$i][4]."','".$arr[$i][5]."')";
mysql_query($sql,$con);
}

?>

問題是我要導入大約30萬條記錄,並且當記錄太多時,沒有記錄導入數據庫,並且出現錯誤消息。 無論如何,我可以更快地導入數據嗎?還是可以在PHP中使用類似的類似LOAD DATA INFILE的語句?

這可以幫助您

<?php
require_once 'reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->read('filename.xls');

$con=mysqli_connect("localhost","username","password","dbname");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

// Create table
$sql="CREATE TABLE tablename(

    quote_number VARCHAR(100),
    line_no VARCHAR(100),
    item_no VARCHAR(100),
    name VARCHAR(100),
    unit VARCHAR(100),
    rm VARCHAR(100),
    capex VARCHAR(100))";

// Execute query
if (mysqli_query($con,$sql))
  {
  echo "Table tablename created successfully";
  }
else
  {
  echo "Error creating table: " . mysqli_error($con);
  }

for($x = 2; $x <= count($data->sheets[0]["cells"]); $x++)
 {
    //$sno = $data->sheets[0]["cells"][$x][1];
    $quote_number = $data->sheets[0]["cells"][$x][1];
    $line_no = $data->sheets[0]["cells"][$x][2];
    $item_no = $data->sheets[0]["cells"][$x][3];
    $name = $data->sheets[0]["cells"][$x][4];
    $unit = $data->sheets[0]["cells"][$x][5];
    $rm = $data->sheets[0]["cells"][$x][6];
    $capex = $data->sheets[0]["cells"][$x][7];

    $res = mysqli_query($con,"INSERT INTO tablename
    (quote_number, line_no, item_no,name,unit,rm,capex) VALUES ('$quote_number','$line_no','$item_no','$name','$unit','$rm','$capex')");
mysqli_close($res);
}
?>

您可以從這里下載reader.php文件

由於您尚未共享LOAD DATA INFILE我認為問題很可能與FILE Privileges有關。

您必須授予加載文件的人FILE特權(Mysql用戶通過php的用戶名/密碼連接)。 像這樣:

 GRANT FILE on *.* TO 'mysql_user'@'localhost' ;  

由於FILE是全局特權,因此請注意,您不能將其本地化到特定數據庫,例如dbname。*。 要運行上面的命令本身,您應該以root或具有GRANT特權的用戶身份從命令行登錄mysql。

完成后,您應該能夠使用LOAD DATA INFILE加載文件。 如果您在共享主機環境中嘗試此操作,則機會很小。 在這種情況下,您必須使用上面嘗試過的方法,讀取文件,分割每一行,驗證該行,然后插入db表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM