php - 在构建 MySql INSERT 中使用 PHP 变量

标签 php mysql csv

我正在努力替换一个简短的脚本,其中我使用 LOAD DATA INFILE 使用 PHP 将 CSV 快速插入到 MySQL 数据库中。

我完全被难住了,希望得到一些帮助 - 我已经看这个好几个小时了,只是把自己搞糊涂了!

问题是我不知道 CSV 中的列数,也不想定义它们,因为它们可能会更改。

从 CSV 中获取 header :

// Get the first column of the file to create the column headers
$fp = fopen($upload_folder . $tempName . '.csv', 'r');
$frow = fgetcsv($fp, 100000, ',');

// Set import strings
$columns = '';
$data_string = '';

$col_count = 0;

foreach($frow as $column) {
  // Build import strings
  $columns .= "`$column` varchar(50)"; 
  $data_string .= "'$" . "data[" . $col_count . "]', ";

  // Now increment the column count
  $col_count++;
}

导入:(我已经回显了这一点,因为我不希望它运行!)

    while (($data = fgetcsv($fp, 100000, ",")) !== FALSE) {
       echo "INSERT INTO nav_data_" . $tempName . " (" . $columns . ") VALUES (" . $data_string . ") ";
    }

问题: 虽然列名已正确构造,但 WHILE 语句中调用的第二个 $data[0]、$data[1] 未被解析,因此我得到:

VALUES ('$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]', '$data[5]', '$data[6]' ... '$data[25]')

我想要 $data = fgetcsv($fp, 100000, ",") ... 的输出...

VALUES ('1', 'Farming', 'Tree', 'Tractor', '345', 'etc.')

我知道这与 PHP 变量有关,但我一辈子都无法解决这个问题。

CSV 数据导入示例:(根据要求)

    Document Type   No_ Order Date  Shipment Date   Sell-to Customer No_    Sell-to Customer Name   Bill-to Customer No_    Bill-to Name    Ship-to Code    Order Status    Customer Disc_ Group    Salesperson Code    Entered by  Taken at    External Document No_   Taken By    Sample  Payment Method Code Currency Code   Payment Terms Code  Amount  O/S Amount Ex VAT (LCY) No_ Order Lines No_ Complete Order Lines    Delivery Date


    Order   SO006906    02/12/14    15/04/15    C001293 Amazon  C001293 Amazon  DEL Insufficient Credit     HS  SARAH   EMAIL           0   ACCOUNT     30D 2313    2313    15  11  


    Order   SO007198    13/01/15    01/04/15    C000871 Amazon  C000871 Amazon  DEL Awaiting Order Ack.     SUSP    SARAH   FF15    RESERVE SUSP    0   ACCOUNT     30DS2.5/30  688 688 4   0   


    Order   SO008292    01/05/15    19/10/15    C003075 Amazon  C003075 Amazon  DEL Proforma Ready To Ship      ZP  SARAH   REP         0   PROFORMA        PROFORMA    484.8   484.8   21  0   

最佳答案

我认为您的问题在于 $data_string .= "'$"。 “数据[” 。 $col_count 。 “]',”;。我可以建议创建一个 $column 数组并在循环后将其内爆,以防止末尾出现逗号。

$column = array();
foreach($frow as $column) {

  // Build import strings
  $column[] = "`$column` varchar(50)"; 

  // Now increment the column count
  $col_count++;
}
$columns = implode(',',$column);

然后,按照与上述相同的方式使用 $data$col_count 在 while 循环中生成插入值字符串。

while (($data = fgetcsv($fp, 100000, ",")) !== FALSE) {

   //$insertColumn = array();
   //for($i=0;$i<=$col_count;$i++){
   //     $insertColumn[] = $data[$i];
   //}
   //$insertColumnString = implode("','",$insertColumn);
   $insertColumnString = implode("','",$data);

   echo "INSERT INTO nav_data_{$tempName} ($columns) VALUES ('$insertColumnString')";

}

关于php - 在构建 MySql INSERT 中使用 PHP 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33766319/

相关文章:

php - 如果我在 phpmyadmin 上删除一个 mySQL 数据库,它会影响上传到我的 ftp 服务器上的内容吗?

php - 我在 Laravel 5.5 中实现邮件时遇到此错误----> Illuminate\Support\Manager::createDriver() 缺少参数 1

mysql - 按顺序选择Mysql条件组的问题

python - Pickling pandas dataframe 将文件大小乘以 5

c# - 在数据中用逗号解析 CSV

php - 验证检查(如果 1 等于数据库中的某个值)Laravel 5

php - 查找点和分组的总和

php - Codeigniter 从数据库中删除行

Mysql JOIN 子查询

python - csv 模块的 excel-tab 方言设置到底是什么?