【问题标题】:Load text file into mysql database and add timestamp to each row将文本文件加载到 mysql 数据库中并为每一行添加时间戳
【发布时间】:2020-09-13 21:52:58
【问题描述】:

我有一个文本文件,每行都有序列号,例如:

7656393835734594
8457457435983945
3489534689856950
4596859684560498

我想使用 PHP 将此文本文件添加到 mysql 表中。我的桌子是这样的:

serials table
    id           bigint(20) auto_increment
    serial       varchar(16)    
    timestamp    timestamp

如何将文本文件中的每一行添加到序列列中,并将当前时间戳添加到每一行?

这是我已经尝试过的:

$file = "serials.txt";
$conn = mysqli_connect('localhost','root','root');
mysqli_select_db($conn, 'myDB');
mysqli_query($conn, "LOAD DATA INFILE '".$file."' INTO TABLE serials");

这段代码没有做任何事情,更不用说添加数据和时间戳了。

【问题讨论】:

    标签: php mysql csv datetime load-data-infile


    【解决方案1】:

    我认为最简单的方法是为timestamp 列定义一个default 值:

    create table serials (
        id bigint primary key auto_increment,
        serial varchar(16),
        ts timestamp default current_timestamp
    )
    

    请注意,我将时间戳列重命名为与语言关键字不冲突的名称。

    然后您可以使用load data 语法。重要的是您需要提供一个列列表,因为并非所有表列都用于插入:

    load data infile 'myfile.txt' into table serials(serial)
    

    另一方面,如果由于某种原因无法修改表定义,另一种方法是使用set 子句提供派生值:

    load data infile 'myfile.txt' into table serials(serial)
    set ts = current_timestamp
    

    【讨论】:

      【解决方案2】:

      如果文件是连接脚本的本地文件,它应该是LOAD DATA INFILE LOCAL 并且在连接之前:

      mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true);
      

      检查服务器设置有:

      local_infile=ON
      

      或者,如果您希望服务器加载文件,secure_file_priv 需要是文件所在的路径。

      【讨论】:

        猜你喜欢
        • 2015-10-07
        • 2014-11-06
        • 2020-05-07
        • 2014-05-26
        • 2012-04-04
        • 2016-04-17
        • 1970-01-01
        • 2015-02-16
        • 1970-01-01
        相关资源
        最近更新 更多