Wordpress - $wpdb-> insert - MySQL NOW()
есть ли возможность использовать 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 );
Ответы
Ответ 1
Я считаю, что канонический подход заключается в использовании функции WordPress current_time()
, передающей ее "mysql" в качестве первого параметра для указания формата совместимости с timestamp 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
Как слово "created" означает, что вам нужно только "NOW()", текущую дату и время, вставить. Вы можете изменить созданное поле.
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", а также получит значение по умолчанию, я предполагаю, что это автоматически увеличивающееся поле.
Ответ 3
В настоящее время все еще неясно, что вы можете легко передавать эти 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
Ответ 4
Это старая тема, но я нашел глупое решение для использования NOW() вне операторов SQL и работает:
$mysql_now = $wpdb->get_row( "SELECT NOW() as dbNow", ARRAY_A );
echo $mysql_now['dbNow'];
Добро пожаловать.