导入LOAD DATA INFILE

时间:2019-04-27 23:24:08

标签: mysql mysqli load-data-infile mysqlimport

我需要将一些csv文件导入mysql。

我最近发现有关LOAD DATA INFILE的信息,据我了解,我检查了手册,以将.csv文件的每一行导入数据库。

我想知道是否可以将一个额外的值连接到csv文件中包含的值。

例如:我的表有3列。

MYTABLE(#name,#email,company_adrs);

csv文件仅包含“名称,电子邮件”数据,而我的地址位于php变量中。

通过普通循环,我将实现以下目标:

//open file
while (/* not end of file, read eachline*/)
{
  $current_line_of_csv_file; // contains: "John,john@john.com" without the 3rd column
  $myAddrsVar= mysqli_real_escape_string($db, $_POST['adrs']); //"44 company st" 
  $insert = $db->query("INSERT MYTABLE (name,email,company_adrs) VALUES ( $current_line_of_csv_file,'".$myAddrsVar."')");

}

使用这种方法,我必须遍历csv的每一行并在每次迭代中进行查询。

我想知道LOAD DATA INFILE是否具有将我的数据连接到csv文件的方法?如果是这样,我该如何实现?

预先感谢

1 个答案:

答案 0 :(得分:0)

鉴于您的情况,我建议使用PHP All-in-all,然后以这种方式将数据插入MySQL。

https://www.php.net/manual/en/function.str-getcsv.php可以帮助您将CSV解析为一个数组。将地址添加到数组中。现在,您将把数据集放在一个数组中。

使用如下所示的准备好的语句https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection,然后依次插入数据。

使用事务,以便插入所有数据或不插入任何数据。参见How to start and end transaction in mysqli?

我会避免使用LOAD DATA INLINE,因为数据量不是很大。如果您确实要使用它并添加另一列,则可以使用SET语句。这里有一个示例:Add extra column of data when using LOAD DATA LOCAL INFILE