我正在使用LOAD DATA INFILE替换一个短脚本,以便使用PHP将CSV快速插入到MySQL数据库中。在构建MySql中使用PHP变量变量INSERT
我完全难住,并希望得到一些帮助 - 我一直在看这个小时,只是困惑自己!
问题是我不知道CSV中的列数,也不想定义它们,因为它们可能会发生变化。
从CSV获得标题:
// 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]')
在哪里,因为我想从$数据= 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
你可以从csv文件发布一些你的数据,几行吗? – mandza
我已经将一些数据添加到原始帖子mandza - 它太长的评论 - 感谢您看这个! – Giles