2011-12-19 20 views
23

¿hay alguna posibilidad de utilizar MySQL NOW() en la llamada $ wpdb-> Insertar?

Cuando uso el siguiente código, NOW() no funciona.

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

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

Simplemente haz 'date ('Y-m-d H: i: s')' – ceejayoz

+0

Pensé en eso y lo intenté también. Funciona, pero tengo el tiempo en GMT y no el momento en que debería ser. NOW() hace bien el trabajo ... – chris

Respuesta

60

creo que el enfoque canónico es utilizar la función de WordPress current_time() pasándole 'mysql' como primer parámetro para especificar un formato compatible con MySQL marca de tiempo (la alternativa es el formato de hora UNIX) y '1' como el segundo parámetro para especificar la hora local (por defecto es GMT), así:

$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) salidas 2012-07-18 12:51:13.

Más aquí: http://codex.wordpress.org/Function_Reference/current_time

+1

Derecha, 'current_time ('mysql')' es lo que WP usa internamente al guardar publicaciones o páginas. – Geert

+8

@coderabbi Pasando '1' o' true' como el segundo parámetro para 'current_time' devuelve UTC/GMT, por defecto es la hora local del blog. – Parham

0

En la actualidad esto todavía no está claro que puede pasar estas funciones SQL como NOW() fácilmente usando el método $wpdb->insert() dentro de la clase de WordPress $wpdb.

corto de escribir una clase para extender la clase $wpdb, la forma más sencilla que puedo ver es utilizar el método $wpdb->query() y escribir algo de código para convertir la matriz $data a una cadena SQL para pasar al método.

$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); 

Más aquí: http://codex.wordpress.org/Class_Reference/wpdb

2

Como palabra "creó" significa que sólo se necesita el "AHORA()", la fecha y hora actuales, en el inserto. Puede alterar el campo creado

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

y no utilice campo creado en absoluto en la consulta, por lo que su nueva consulta se verá como ..

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

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

y al ejecutar la consulta "creado" tomará el valor predeterminado, será igual a NOW(), puede haber notado que he omitido "id" y también obtendrá su valor predeterminado, supongo que se auto incrementó el campo.

-3

Es un viejo tema, pero he encontrado una solución tonto para usar NOW() fuera de sentencias SQL y funciona:

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

Usted es bienvenido.