首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中MYSQL的LOAD DATA INFILE方法

PHP中MYSQL的LOAD DATA INFILE方法
EN

Stack Overflow用户
提问于 2013-11-25 01:11:22
回答 2查看 359关注 0票数 0

我想通过php将存储在.csv文件中的数据导入mysql。LOAD DATA INFILE查询似乎不起作用,我设法编写了一个代码来逐个导入记录。代码如下:

代码语言:javascript
复制
<?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);
}

?>

问题是我有大约300000条记录要导入,当记录太多时,没有记录被导入到数据库中,并且我收到一条错误消息。有没有什么方法可以更快地导入数据,或者有什么类似的语句可以在PHP中使用,比如LOAD data INFILE?

EN

回答 2

Stack Overflow用户

发布于 2013-12-31 11:37:32

这可能会对你有所帮助

代码语言:javascript
复制
<?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);
}
?>

您可以从here下载reader.php文件

票数 3
EN

Stack Overflow用户

发布于 2013-12-31 12:04:10

由于您尚未共享LOAD DATA INFILE,因此我认为问题很可能出在FILE Privileges

您必须将文件特权授予加载文件的人(Mysql用户通过用户名/密码从php连接)。像这样的东西:

代码语言:javascript
复制
 GRANT FILE on *.* TO 'mysql_user'@'localhost' ;  

由于FILE是全局权限,因此您不能将其本地化到特定的数据库,例如dbname.*,仅供注意。要运行上述命令本身,您应该以root或具有GRANT权限的用户身份从命令行登录到mysql。

完成后,您应该能够使用LOAD DATA INFILE加载该文件。如果你在共享主机环境中尝试这样做,你的机会很小。在这种情况下,你必须使用你尝试过的上述方法,读取文件,拆分每一行,验证行,插入到数据库表中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20177368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档