gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:28:11 24 4
gpt4 key购买 nike

我正在努力替换一个简短的脚本,其中我使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com