Jul
12
2009
1

Timestamp en php y mysql

Es algo común tener que estar guardando fechas en la base de datos, sin embargo, es recomendable definir cual será la fuente para la base del tiempo, es decir, puede que pase que existen dos servidores el primero que mantiene a la aplicación y el segundo que tiene a la base de datos y podría pasar en el caso que no estén sincronizados por un servidor npt que el tiempo difiera y en el caso más pesimista hasta que en una haya cambiado la zona horaria y en el otro no.
Esto pasa al momento de obtener el tiempo para guardarlo en la base de datos, en el caso que obtengamos el tiempo usando una función en PHP estaremos obteniendo el tiempo del servidor que mantiene a la aplicación PHP, en el caso que dentro del QUERY la función NOW() esta corresponde a MYSQL y en este caso se retornala fecha y tiempo del servidor de la base de datos.

Lo correcto es definir al sistema u aplicación bajo uno de los dos para el efecto de llevar el tiempo y zona correcta.

CASO PHP:

Al crear dentro de una tabla MYSQL un campo del tipo DATETIME
Para poder insertar la fecha y tiempo en el formato (por defecto) correcto de MySQL usando PHP se hace con

Guardar en MySQL usando función de tiempo PHP
< ?

 date('Y-m-d H:i:s', time());

?>

Recuperar fecha MySQL en una variable PHP

Se debe usar la función srttotime

 $phpdate = strtotime( $fechaFromMySQL );

CASO BD:
En este caso dentro del insert en el lugar del valor del campo datetime se utiliza la funcion now(), favor considerar que el siguiente ejemplo tiene una tabla de nombre “usuario” y que tiene 3 campos del varchar los dos primeros asociados al nombre y apellido mas el tercer campo de timestamp al cual se le asocia el valor de la funcion NOW() que devuelve la hora local que tiene el servidor MYSQL del server donde se ejecuta la query.

ejm:

 INSERT INTO usuario VALUES ( 'juan','perez',now());

El ejemplo anterior no se debe usar por ahorrarse un par de lineas al realizar aplicaciones robustas dado que los valores se asocian segun el orden determinado en el show table de mysql, sirve para un test rapido cuando uno esta conectado a la consola, debido a esto lo correcto es insertar los valores asociados a una tabla indicando el nombre de cada uno de los campos estableciendo el orden de los valores a insertarse en el mismo query a continuacion de la misma sentencia sql.

El ejemplo real de uso es:

INSERT INTO usuario(nombre,apellidos, fecha_actual) VALUES ('Juan','perez',NOW());


select NOW();

Referencias:

bigroom

http://en.wikipedia.org/wiki/Insert_(SQL)

Written by doutdex in: Uncategorized | Tags: , , ,