导入 LOAD DATA INFILE 时将我的 php 变量连接到 csv 数据

Concatenate my php variable to csv data when importing LOAD DATA INFILE

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

最近发现了LOAD DATA INFILE,我查了手册,据我所知,将.csv文件的每一行导入到数据库中。

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

例如:我的 table 有 3 列。

MYTABLE(#name,#email,company_adrs);

csv 文件只有 "name,email" 的数据,我在 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 文件的方法?如果可以,我该如何实现?

提前致谢

鉴于您的情况,我建议使用 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