Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 导入具有可变文件名的csv文件_Php_Sql_Csv_Import - Fatal编程技术网

Php 导入具有可变文件名的csv文件

Php 导入具有可变文件名的csv文件,php,sql,csv,import,Php,Sql,Csv,Import,我的供应商每天都会发送一份订单状态更新,其中包含一个可变的静态文件名,以便导入到我的sql db中。我的cronjob具有以下代码: <?php require('cron_config.php'); // Open and parse the sales.csv file $fh = fopen("../files/out/orderstatus.csv", "r"); while ($line = fgetcsv($fh, 1000, ",")) { $order_id =

我的供应商每天都会发送一份订单状态更新,其中包含一个可变的静态文件名,以便导入到我的sql db中。我的cronjob具有以下代码:

<?php
require('cron_config.php');

// Open and parse the sales.csv file
$fh = fopen("../files/out/orderstatus.csv", "r");

while ($line = fgetcsv($fh, 1000, ","))
{
    $order_id = $line[0];
    $order_status_id = $line[1];
    $date_modified = $line[2];

    // Insert the data into the sales table
    $query = "UPDATE oc_order o SET order_status_id='$order_status_id',
        date_modified='$date_modified' WHERE order_id = '$order_id'";

    $result = $mysqli->query($query);
}

fclose($fh);
$mysqli->close();
?>

为什么不搜索它:

$result = array_filter(array_map(
       function($a){ 
          return strpos($a,'orderstatus_')===0?$a:null;          
       }
       ,scandir('../files/out/'))); 
结果数组将只保存文件夹中以
orderstatus\uuuu
开头的所有文件。通过glob()和unlink()它完成了任务。代码如下:

<?php
require('cron_config.php');

foreach (glob("../files/out/orderstatus_*.csv") as $filename) {
echo "$filename \n";
}

// Open and parse the sales.csv file
$fh = fopen("$filename", "r");

while ($line = fgetcsv($fh, 1000, ","))
{
    $order_id = $line[0];
    $order_status_id = $line[1];
    $date_modified = $line[2];

    // Insert the data into the sales table
    $query = "UPDATE oc_order o SET order_status_id='$order_status_id',
        date_modified='$date_modified' WHERE order_id = '$order_id'";

    $result = $mysqli->query($query);
}

fclose($fh);
unlink("$filename");
$mysqli->close();
?>

您现在使用的方法有什么问题?如果你每天都收到相同的文件,那么就重写旧文件?可惜我不是php的家伙。您需要从
orderstatus\u order\u id.csv
中解析订单id,可能需要使用
regex
。然后将其存储到变量中,然后在SQL的串联/参数化中使用此变量:
WHERE order\u id='“$order\u id.”“
WHERE order\u id='”$订单id。“”
-点,而不是
+
's@T.s.inphp@Fred-ii-感谢您的帮助如果您在该目录中没有任何其他文件,id将通过日期创建-您可以通过时间戳获取最新的csv文件-示例。在那之后,我认为只获取.csv文件的id很简单。当然,但这需要文件夹只包含一个文件,不是吗?@Fred-ii-认为OP显示的不是这背后的全部逻辑。导入/更新后是否删除文件?文件夹中是否同时有多个CSV?那么应该导入所有文件吗?等等……Lordie,很难说,IMHO认为这个问题对于(动态)文件将从何而来/如何来都不清楚/太广泛。所以我被指向
如何用我的代码识别这个文件?
仅;-)哈哈,不知道。我想如果这就是问题所在的话,我会做好的。