使用PHP和MySQLi导入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

我正在使用下面的代码将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."' 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()
导致文件位置被读取为字符串而不是对象。现在可以正常工作了,非常感谢!