使用PHP和MySQLi导入CSV替代方法
我正在使用下面的代码将CSV文本文件导入到我的表中,但我的新主机不允许使用PHP和MySQLi导入CSV替代方法,php,mysql,Php,Mysql,我正在使用下面的代码将CSV文本文件导入到我的表中,但我的新主机不允许加载数据命令,并强制我找到导入文件的替代方法。当然,他们没有给我一个明确的答案 除了LOAD DATA LOCAL和LOAD DATA之外,我还需要通过PHP/MySQLi将CSV文件导入MySQL表吗 // Query - import CSV file into DB, ignore top 3 lines $sql= "LOAD DATA LOCAL INFILE '".$import_file."' INT
加载数据
命令,并强制我找到导入文件的替代方法。当然,他们没有给我一个明确的答案
除了LOAD DATA LOCAL
和LOAD DATA
之外,我还需要通过PHP/MySQLi将CSV文件导入MySQL表吗
// Query - import CSV file into DB, ignore top 3 lines
$sql= "LOAD DATA LOCAL INFILE '".$import_file."' INTO TABLE `$dbtable`
FIELDS TERMINATED BY '".$fieldseparator."'
LINES TERMINATED BY '".$lineseparator."'
IGNORE 3 LINES
SET TIMESTAMP = '".$local_time."'";
谢谢
编辑:
在研究了建议的fgetcsv
函数后,我得出了以下代码。从理论上讲,它应该可以工作,但代码似乎会一直加载,直到最后超时,而不会显示错误。数据库中只填充了一行条目
我做错了什么
if ($import_file) {
// set row counter to 0
$line = 0;
while ( ($row = fgetcsv($import_file)) !== false ) {
// ignore the first 3 rows of the file based on iteration of the counter
if ($line <= 3) {
$line++;
continue;
} else {
// if row count is higher than 3, insert into database
$sql = "INSERT INTO `$dbtable`
(`OPERA_CONF`, `CRS`, `HOLIDEX`, `ARRIVAL`)
VALUES (
'" . $row[0] . "',
'" . $row[1] . "',
'" . $row[2] . "',
'" . $row[3] . "'
)";
// execute query
$mysqli->query($sql);
$line++;
}
}
} else {
echo "\n CSV file could not be found.";
}
if($import\u文件){
//将行计数器设置为0
$line=0;
while(($row=fgetcsv($import_file))!==false){
//根据计数器的迭代忽略文件的前3行
if($line查询($sql);
$line++;
}
}
}否则{
echo“\n找不到CSV文件。”;
}
您必须使用PHP逐行读取CSV文件的内容并将其插入表中
看看
粘贴在此处以便于使用的代码:
$filepath = "C:\wamp\www\importdata\sample.csv";
if (($getdata = fopen($filepath, "r")) !== FALSE) {
fgetcsv($getdata);
while (($data = fgetcsv($getdata)) !== FALSE) {
$fieldCount = count($data);
for ($c=0; $c < $fieldCount; $c++) {
$columnData[$c] = $data[$c];
}
$option_name = mysqli_real_escape_string($connect ,$columnData[0]);
$option_value = mysqli_real_escape_string($connect ,$columnData[1]);
$import_data[]="('".$option_name."','".$option_value."')";
// SQL Query to insert data into DataBase
}
$import_data = implode(",", $import_data);
$query = "INSERT INTO option_data_master(option_name,option_value) VALUES $import_data ;";
$result = mysqli_query($connect ,$query);
$filepath=“C:\wamp\www\importdata\sample.csv”;
if($getdata=fopen($filepath,“r”)!==FALSE){
fgetcsv($getdata);
while(($data=fgetcsv($getdata))!==FALSE){
$fieldCount=计数($data);
对于($c=0;$c<$fieldCount;$c++){
$columnData[$c]=$data[$c];
}
$option\u name=mysqli\u real\u escape\u string($connect,$columnData[0]);
$option_value=mysqli_real_escape_string($connect,$columnData[1]);
$import_data[]=”(“$option_name.”、“$option_value.”);
//将数据插入数据库的SQL查询
}
$import\u data=内爆(“,”,$import\u data);
$query=“插入选项\数据\主数据(选项\名称、选项\值)值$import\ U data;”;
$result=mysqli\u查询($connect,$query);
您没有访问phpmyadmin的权限?@Ashish我有,但是运行此查询的脚本绑定到一个cronjob,并且应该每15分钟运行一次。如果没有加载数据
命令,我什么都做不了(或者至少我不知道如何做),感谢尼克,只是不确定选项数据\u主控(选项名称,选项值)的用途
是吗?这些是列名吗?你能看看我发布的代码吗?谢谢没有问题:)你的代码看起来不错。你要导入的CSV文件有多大?很小,最多500行,每行25列。整个过程只需加载,然后停止,没有任何错误消息。如果需要,请尝试将$mysqli->query($sql);
更改为(!mysqli->query($sql)){printf(“Errormessage:%s\n”,$mysqli->error);}
谢谢,已经找到了。问题是缺少的fopen()
导致文件位置被读取为字符串而不是对象。现在可以正常工作了,非常感谢!