PHP:转换日期格式时,使用 sprintf 加载数据文件中出现 '%' 问题

标签 php mysql

我正在尝试使用此加载 csv 文件,但日期格式不正确,我需要在插入数据库之前重新格式化

if (is_array($file)) {
    foreach ($file as $key => $value) {
        $loadData = sprintf("
            LOAD DATA local INFILE '%s' IGNORE INTO TABLE pos_vs_cognizant CHARACTER SET UTF8 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' LINES TERMINATED BY '\\n' IGNORE 1 LINES  
            (
                @store, 
                @business_date, 
                @ns_pos, 
                @ns_cognizant, 
                @ns_variance, 
                @tc_pos, 
                @tc_cognizant, 
                @tc_variance
            ) 
            SET
            id=null,
            store=@store,
            business_date=STR_TO_DATE(@business_date, '%d-%b-%y'),
            ns_pos=@ns_pos,
            ns_cognizant=@ns_cognizant,
            ns_variance=@ns_variance,
            tc_pos=@tc_pos,
            tc_cognizant=@tc_cognizant,
            tc_variance=@tc_variance,
            unique_row=CONCAT(STR_TO_DATE(@business_date, '%d-%b-%y'),'_',@store,'_',@ns_pos,'_',@tc_pos),
            created_at=now()
        ", addslashes($value));

        if (DB::connection()->getpdo()->exec($loadData)) {
            $response['status'] = 'success';
            //echo'tes';
        } else {
            $response['status'] = 'error';
            //echo'ayaw';
        }
    }
}else{
    //echo'wala nangyre';
}

发生的情况是“%”与 sprintf 有问题,所以我所做的是在没有 sprintf 的情况下尝试它,但它抛出了 mysql 语法错误,我已经尝试更改转义,封闭和终止仍然不起作用。

是否有其他替代方法将这些日期“dd-mm-yy”转换为“YYYY-mm-dd”或不使用 sprintf 插入?

最佳答案

使用 %% 表示 sprintf() 格式字符串中的文字 % 字符。

    $loadData = sprintf("
        LOAD DATA local INFILE '%s' IGNORE INTO TABLE pos_vs_cognizant CHARACTER SET UTF8 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' LINES TERMINATED BY '\\n' IGNORE 1 LINES  
        (
            @store, 
            @business_date, 
            @ns_pos, 
            @ns_cognizant, 
            @ns_variance, 
            @tc_pos, 
            @tc_cognizant, 
            @tc_variance
        ) 
        SET
        id=null,
        store=@store,
        business_date=STR_TO_DATE(@business_date, '%%d-%%b-%%y'),
        ns_pos=@ns_pos,
        ns_cognizant=@ns_cognizant,
        ns_variance=@ns_variance,
        tc_pos=@tc_pos,
        tc_cognizant=@tc_cognizant,
        tc_variance=@tc_variance,
        unique_row=CONCAT(STR_TO_DATE(@business_date, '%%d-%%b-%%y'),'_',@store,'_',@ns_pos,'_',@tc_pos),
        created_at=now()
    ", addslashes($value));

关于PHP:转换日期格式时,使用 sprintf 加载数据文件中出现 '%' 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55152965/

相关文章:

MySQL/JDBC/Hibernate 第 19 列中的 DATE '91' 格式错误

php - 在 Ajax 调用期间发送中间消息

php - IF NOT EXISTS then INSERT else show message 不工作

php - 清理 XSS 到 Textarea 的输出

php - 如何将变量从 PHP 传递到 Flash (ActionScript 3)

java - Hibernate 使用 hbm2ddl.auto=update 保留一些表,使用 hbm2ddl.auto=create 重新加载一些表

mysql - INSERT INTO SELECT 如何按正确顺序插入?

php - 我在哪里可以找到 Simpletest 的扩展 HTML 报告程序?

mysql - 如何有选择地计算记录并在mysql中按日期分组?

java - 选择包含的字符串