php - PHP 中 MYSQL 的 LOAD DATA INFILE 方法

标签 php mysql

我想通过 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);
}

?>

问题是我有大约 300 000 条记录要导入,当记录太多时,没有记录导入数据库,我收到错误消息。无论如何我可以更快地导入数据,或者是否有类似 LOAD DATA INFILE 的类似语句我可以在 PHP 中使用?

最佳答案

这可能对你有帮助

<?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 文件

关于php - PHP 中 MYSQL 的 LOAD DATA INFILE 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20177368/

相关文章:

php - mysql 在 48 小时后每 10 分钟选择一次记录总和

php - 使用 STS 凭据授权 AWS - 没有 session token

mysql - 来自 ip2location 的 IP 数据库并在 Perl 中将 IPV4 转换为 IPV6

php - 无法更新 mysql 中的二进制值

mysql - 如何在基于 mysql/mysql-server 的 Docker 容器中启动 MySQL 服务器

php - 如何检查URL首字母是否小于G?

PHP SimpleXML XPath 获取下一个父节点

php - 是否有任何通用的 CRUD 客户端应用程序?

php - PDO 插入上的数组到字符串

mysql - 将 JSTL SQL 结果转发给 Servlet