[英]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.