Подтвердить что ты не робот

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 );
4b9b3361

Ответ 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'];

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