Как сделать: wpdb вставка записи с датой

24 апр. 2013 г., 23:07:01
Просмотры: 20K
Голосов: 2

Я пишу плагин, где мне нужно предварительно загрузить некоторые данные в пользовательские таблицы, которые я создаю при активации. Мои 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', но это тоже не работает. Я уверен, что либо пропустил какой-то синтаксис, либо сделал что-то неправильно.

0
Все ответы на вопрос 3
0

Вы можете просто использовать функцию current_time. Например:

<?php $time = current_time( 'mysql' ); ?>

Функция вернет строку с датой и временем в формате, который требует MySQL.

Подробнее можно узнать здесь. А если вас интересуют "проблемы программирования с учетом часовых поясов", вам будет полезно прочитать статью Управление временем и датами в WordPress.

20 дек. 2016 г. 05:14:57
4

date не принимает строку в удобочитаемом формате. Она принимает Unix timestamp. Вам нужно преобразовать эту человекочитаемую дату в timestamp с помощью strtotime.

'begin_date'   => date('Y-m-d', strtotime('2012-08-14')),

Конечно, на самом деле нет необходимости преобразовывать дату в формате ГОД-МЕСЯЦ-ДЕНЬ в timestamp, только чтобы потом преобразовать её обратно в тот же формат ГОД-МЕСЯЦ-ДЕНЬ.

24 апр. 2013 г. 23:27:16
Комментарии

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

s_ha_dum s_ha_dum
24 апр. 2013 г. 23:51:10

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

clockwiseq clockwiseq
24 апр. 2013 г. 23:53:43

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

clockwiseq clockwiseq
25 апр. 2013 г. 00:00:04

для тех, кто читает это: нет необходимости преобразовывать строку 2012-08-14 с помощью strtotime, а затем снова генерировать её через date — достаточно просто указать 'begin_date' => '2012-08-14'

Alex K Alex K
7 июл. 2016 г. 19:21:07
0

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

16 янв. 2022 г. 21:49:13