Wordpress-w wpdb- > insertar-MySQL AHORA()


¿Hay alguna posibilidad de usar MySQL NOW() en la llamada insert wpdb->insert?

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 );
 27
Author: chris, 2011-12-19

4 answers

Creo que el enfoque canónico es usar la función WordPress current_time() pasándole 'mysql' como el primer parámetro para especificar un formato compatible con mysql timestamp (la alternativa es UNIX timestamp format) 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

 64
Author: coderabbi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-18 16:51:29

Como palabra "creado" significa que solo necesita el "AHORA()", fecha y hora actuales, en insertar. Puede modificar el campo creado

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

Y no use el campo creado en absoluto en query, 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 cuando ejecute su consulta "created" tomará el valor predeterminado, será igual a NOW(), puede que haya notado que he omitido "id" y también obtendrá su valor predeterminado, asumo que es un campo auto incrementado.

 2
Author: user2808180,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-19 13:30:25

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

Antes de escribir una clase para extender la clase $wpdb, la forma más sencilla que puedo ver es usar el método $wpdb->query() y escribir algún código para convertir su matriz $data en 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

 0
Author: paperclip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-18 09:51:24

Es un tema antiguo, pero encontré una solución tonta para usar NOW() fuera de las sentencias SQL y funciona:

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

De nada.

 -3
Author: Cyto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-24 22:49:50