Как сделать: wpdb вставка записи с датой
Я пишу плагин, где мне нужно предварительно загрузить некоторые данные в пользовательские таблицы, которые я создаю при активации. Мои INSERT-запросы работали нормально до тех пор, пока я не попытался вставить запись с типом данных DATE. Можете, пожалуйста, подсказать, что я делаю неправильно?
Определение таблицы базы данных:
$sql = "CREATE TABLE IF NOT EXISTS " . $wpdb->prefix.SSM_ACADEMIC_YEAR_TABLE. " (
id mediumint(12) NOT NULL AUTO_INCREMENT,
academicyear VARCHAR(200) NOT NULL,
begin_date date NOT NULL,
end_date date NOT NULL,
created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id));";
$wpdb->query($sql);
Вставка в базу данных:
$current_year = array(
'academicyear' => '2012 - 2013',
'begin_date' => date('Y-m-d', '2012-08-14'),
'end-date' => date('Y-m-d', '2013-05-31')
);
$wpdb->insert($wpdb->prefix.SSM_ACADEMIC_YEAR_TABLE, $current_year);
Я пробовал разные методы, например, просто использовать => '2012-08-14', но это тоже не работает. Я уверен, что либо пропустил какой-то синтаксис, либо сделал что-то неправильно.

Вы можете просто использовать функцию current_time
. Например:
<?php $time = current_time( 'mysql' ); ?>
Функция вернет строку с датой и временем в формате, который требует MySQL.
Подробнее можно узнать здесь. А если вас интересуют "проблемы программирования с учетом часовых поясов", вам будет полезно прочитать статью Управление временем и датами в WordPress.

date
не принимает строку в удобочитаемом формате. Она принимает Unix timestamp. Вам нужно преобразовать эту человекочитаемую дату в timestamp с помощью strtotime
.
'begin_date' => date('Y-m-d', strtotime('2012-08-14')),
Конечно, на самом деле нет необходимости преобразовывать дату в формате ГОД-МЕСЯЦ-ДЕНЬ в timestamp, только чтобы потом преобразовать её обратно в тот же формат ГОД-МЕСЯЦ-ДЕНЬ.

В вашем коде опечатка. Вы создали end_date
, но вставляете данные в end-date
. Я помечаю это для закрытия как 'слишком локализовано', но вы можете просто удалить это.

О боже! Большое спасибо! Вот в чем была проблема, и да, я удалю это.

Похоже, у меня недостаточно прав для удаления, так что можете закрыть это.

Принятый ответ неверен. Вы можете передавать строковые форматы даты в базу данных, если они отформатированы так, чтобы база данных могла их понять (например, 2022-01-15T20:34:34
или 2022-01-15 20:34:34
). Вы можете найти спецификации MariaDB здесь, я почти уверен, что они такие же, как и для MySQL.
