Php 使用PDO加载具有特定列的csv文件

Php 使用PDO加载具有特定列的csv文件,php,mysql,csv,Php,Mysql,Csv,我有这样一个表结构: id assigned_by assigned_to_user_id vendor_id receiver_no purchase_order_no destination po_status invoice_no invoice_amount delivery_date datetime_done latest_jda_sync_date latest_mobile_sync_date created_at updated_at deleted_at vendor_id

我有这样一个表结构:

id
assigned_by
assigned_to_user_id
vendor_id
receiver_no
purchase_order_no
destination
po_status
invoice_no
invoice_amount
delivery_date
datetime_done
latest_jda_sync_date
latest_mobile_sync_date
created_at
updated_at
deleted_at
vendor_id receiver_no purchase_order_no destination po_status
30105   20110   10151   9005    3
50015   20114   10155   9005    3
我的csv文件的内容如下:

id
assigned_by
assigned_to_user_id
vendor_id
receiver_no
purchase_order_no
destination
po_status
invoice_no
invoice_amount
delivery_date
datetime_done
latest_jda_sync_date
latest_mobile_sync_date
created_at
updated_at
deleted_at
vendor_id receiver_no purchase_order_no destination po_status
30105   20110   10151   9005    3
50015   20114   10155   9005    3
现在我可以加载csv文件并将它们插入我的数据库。我在下面有这个脚本

$columns = "(@dummy, @dummy, @dummy, vendor_id, receiver_no, purchase_order_no, destination, po_status, @dummy, @dummy, @dummy, @dummy, @dummy, @dummy, @dummy, @dummy, @dummy)";
$affectedRows = $pdo->exec("
    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
      FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
      LINES TERMINATED BY ".$pdo->quote($lineseparator)." ". $columns);

我遇到的唯一问题是将数据插入到正确的列中。有人能帮我吗。

您需要指定要使用的列(看起来您已经按照语句执行的顺序对它们进行了修改):

请参阅以下文件中的。

处理输入行时,将其拆分为字段,并根据列/变量列表和
SET
子句(如果存在)使用值

换句话说,列列表应该描述每个输入字段应该分配到的数据库列(或用户变量)(而不是描述每个数据库列可以在哪个输入字段中找到)。当然,当人们意识到输入文件不需要包含字段名时,这是显而易见的,因此在所有情况下都不可能采用后者的方法

因此,您需要:

$columns = '(vendor_id, receiver_no, purchase_order_no, destination, po_status)';
您还需要在命令中添加
忽略1行
,以跳过第一行(带字段名):


嗨,艾格雅,它工作了!。我还有一个问题。您可以在脚本中添加忽略重复部分吗?据我所知,在将重复数据插入数据库之前,请删除这些重复数据。因为我将拉另一个csv文件与其他内容。Sorry@user2720708:如果表中定义了合适的唯一性约束,则只需在文件名后添加
忽略
(保留现有数据)或
替换
(删除记录并替换为新数据)。手册上都有详细说明。请单独发布一个问题,描述您遇到的问题(如果有的话)。您好,我在这里发布了另一个问题: