Wordpress - $ wpdb-> insert - MySQL NOW () - PullRequest
       0

Wordpress - $ wpdb-> insert - MySQL NOW ()

31 голосов
/ 19 декабря 2011

есть ли возможность использовать MySQL NOW () в вызове $ wpdb-> insert?

Когда я использую следующий код, NOW () не работает.

$data = array(
        'id' => NULL,
        'order' => serialize($_POST['data']['Order']),
        'created' => NOW(),
        'user_id' => $current_user->ID
    );

$wpdb->insert(ORDERS_TABLE, (array) $data );

Ответы [ 4 ]

71 голосов
/ 18 июля 2012

Я считаю, что канонический подход состоит в том, чтобы использовать функцию WordPress current_time(), передавая ей «mysql» в качестве первого параметра, чтобы указать формат, совместимый с меткой времени mysql (альтернативой является формат метки времени UNIX) и «1» в качестве второго параметра для укажите местное время (по умолчанию GMT), например:

$data = array(
    'id' => NULL,
    'order' => serialize($_POST['data']['Order']),
    'created' => current_time('mysql', 1),
    'user_id' => $current_user->ID
);

$wpdb->insert(ORDERS_TABLE, $data);

current_time('mysql', 1) выходы 2012-07-18 12:51:13.

Подробнее здесь: http://codex.wordpress.org/Function_Reference/current_time

2 голосов
/ 19 февраля 2014

Поскольку слово «создан» означает, что вам нужно только «СЕЙЧАС ()», текущая дата и время, при вставке.Вы можете изменить созданное поле

 ALTER TABLE `ORDERS_TABLE` CHANGE `created` `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

и вообще не использовать созданное поле в запросе, поэтому ваш новый запрос будет выглядеть следующим образом:

$data = array(        
    'order' => serialize($_POST['data']['Order']),        
    'user_id' => $current_user->ID
);

$wpdb->insert(ORDERS_TABLE, (array) $data );

и при запускезапрос «создан» будет принимать значение по умолчанию, оно будет равно NOW (), вы, возможно, заметили, что я опустил «id», а также он получит значение по умолчанию, я предполагаю, что это поле с автоматическим приращением.

0 голосов
/ 25 февраля 2015

Это старая тема, но я нашел глупое решение для использования NOW () вне операторов SQL, и оно работает:

$mysql_now = $wpdb->get_row( "SELECT NOW() as dbNow", ARRAY_A );
echo $mysql_now['dbNow'];

Добро пожаловать.

0 голосов
/ 18 апреля 2012

В настоящее время все еще неясно, что вы можете легко передавать эти функции SQL, такие как NOW (), используя метод $wpdb->insert() в классе WordPress $wpdb.

Если не считать написания класса для расширения класса $wpdb, самый простой способ, который я вижу, - это использовать метод $wpdb->query() и написать некоторый код для преобразования массива $data в строку SQL для передачи в способ.

$sql = sprintf( 
    'INSERT INTO table (id, order, created, user_id) VALUES (%d, %d, %s, %d)',
    $data[id], $data['order'], $data['created'], $data['user_id'] 
);

$wpdb->update( $sql );

Подробнее здесь: http://codex.wordpress.org/Class_Reference/wpdb

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