Загрузите текстовый файл в базу данных mysql и добавьте отметку времени в каждую строку - PullRequest
2 голосов
/ 27 мая 2020

У меня есть текстовый файл с серийными номерами в каждой строке, например:

7656393835734594
8457457435983945
3489534689856950
4596859684560498

Я хочу добавить этот текстовый файл в таблицу mysql, используя PHP. Моя таблица выглядит так:

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");

Этот код ничего не делает, не говоря уже о добавлении данных и метки времени.

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Я думаю, что самый простой подход - определить значение default для столбца timestamp:

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

Обратите внимание, что я переименовал столбец 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
0 голосов
/ 27 мая 2020

если файл является локальным для сценария подключения, он должен быть LOAD DATA INFILE LOCAL и перед подключением:

mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true);

Проверьте настройки сервера:

local_infile=ON

Альтернативно, если вы хотите, чтобы сервер загружал файл secure_file_priv должен быть путем, по которому находится файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...