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