将文本文件加载到 mysql 数据库并为每一行添加时间戳
Load text file into mysql database and add timestamp to each row
我有一个文本文件,每行都有序列号,例如:
7656393835734594
8457457435983945
3489534689856950
4596859684560498
我想使用 PHP 将此文本文件添加到 mysql table 中。我的 table 看起来像这样:
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");
此代码不执行任何操作,更不用说添加数据和时间戳了。
我认为最简单的方法是为 timestamp
列定义一个 default
值:
create table serials (
id bigint primary key auto_increment,
serial varchar(16),
ts timestamp default current_timestamp
)
请注意,我将时间戳列重命名为某个与语言关键字不冲突的名称。
然后您可以使用 load data
语法。重要的是您需要提供列列表,因为并非所有 table 列都为插入提供:
load data infile 'myfile.txt' into table serials(serial)
另一方面,如果由于某种原因无法修改 table 定义,另一种方法是使用 set
子句提供派生值:
load data infile 'myfile.txt' into table serials(serial)
set ts = current_timestamp
如果文件是连接脚本的本地文件,它应该是 LOAD DATA INFILE LOCAL
并且在连接之前:
mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true);
检查服务器设置有:
local_infile=ON
或者,如果您希望服务器加载文件,secure_file_priv 需要是文件所在的路径。
我有一个文本文件,每行都有序列号,例如:
7656393835734594
8457457435983945
3489534689856950
4596859684560498
我想使用 PHP 将此文本文件添加到 mysql table 中。我的 table 看起来像这样:
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");
此代码不执行任何操作,更不用说添加数据和时间戳了。
我认为最简单的方法是为 timestamp
列定义一个 default
值:
create table serials (
id bigint primary key auto_increment,
serial varchar(16),
ts timestamp default current_timestamp
)
请注意,我将时间戳列重命名为某个与语言关键字不冲突的名称。
然后您可以使用 load data
语法。重要的是您需要提供列列表,因为并非所有 table 列都为插入提供:
load data infile 'myfile.txt' into table serials(serial)
另一方面,如果由于某种原因无法修改 table 定义,另一种方法是使用 set
子句提供派生值:
load data infile 'myfile.txt' into table serials(serial)
set ts = current_timestamp
如果文件是连接脚本的本地文件,它应该是 LOAD DATA INFILE LOCAL
并且在连接之前:
mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true);
检查服务器设置有:
local_infile=ON
或者,如果您希望服务器加载文件,secure_file_priv 需要是文件所在的路径。