php - fecha - insertar hora actual mysql
Inserte la fecha/hora actual usando now() en un campo usando MySQL/PHP (7)
Dado que MySQL evidentemente no puede insertar automáticamente la función now () en un campo de fecha y hora al agregar nuevos registros como algunas otras bases de datos, en función de los comentarios, explícitamente intento insertarlo usando una declaración de SQL. (La gente parece pensar que la marca de tiempo con curdate () no es la respuesta debido a las diversas limitaciones de la marca de tiempo). Hay numerosos artículos en la web que sugieren que insertar ahora () usando SQL debería funcionar.
Sin embargo, cuando intento insertar la fecha y hora usando la declaración SQL, el campo no se llena con la hora / fecha actual, pero solo me da el predeterminado 00:00, etc. Este es probablemente un error de sintaxis, pero es volviendo loco, así que lo estoy publicando.
mysql_query("INSERT INTO users (first, last, whenadded) VALUES (''$first'', ''$last'', now())";
Se inserta primero y último, pero nada para cuando se agrega, dejando 0000-00-00, etc. en el campo whenadded.
El tipo de campo es datetime, no tiene intercalación, atributos, nulo predeterminado o extra. Por cierto, intenté poner ahora () en comillas simples ... Lanzó un error.
Estos dos funcionan bien para mí ...
<?php
$db = mysql_connect(''localhost'',''user'',''pass'');
mysql_select_db(''test_db'');
$stmt = "INSERT INTO `test` (`first`,`last`,`whenadded`) VALUES ".
"(''{$first}'',''{$last}'',''NOW())";
$rslt = mysql_query($stmt);
$stmt = "INSERT INTO `users` (`first`,`last`,`whenadded`) VALUES ".
"(''{$first}'', ''{$last}'', CURRENT_TIMESTAMP)";
$rslt = mysql_query($stmt);
?>
Nota al margen: mysql_query () no es la mejor manera de conectarse a MySQL en las versiones actuales de PHP.
La única razón por la que puedo pensar es que la está agregando como cadena ''now()''
, no función llamada now()
.
O lo que sea, otro error tipográfico.
SELECT NOW();
para ver si devuelve el valor correcto?
Olvidaste cerrar el comando mysql_query:
mysql_query("INSERT INTO users (first, last, whenadded) VALUES (''$first'', ''$last'', now())"
) ;
Tenga en cuenta que los últimos paréntesis.
Como dijo Pekka, debería funcionar de esta manera. No puedo reproducir el problema con este ejemplo autónomo:
<?php
$pdo = new PDO(''mysql:host=localhost;dbname=test;charset=utf8'', ''localonly'', ''localonly'');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->exec(''
CREATE TEMPORARY TABLE soFoo (
id int auto_increment,
first int,
last int,
whenadded DATETIME,
primary key(id)
)
'');
$pdo->exec(''INSERT INTO soFoo (first,last,whenadded) VALUES (0,1,Now())'');
$pdo->exec(''INSERT INTO soFoo (first,last,whenadded) VALUES (0,2,Now())'');
$pdo->exec(''INSERT INTO soFoo (first,last,whenadded) VALUES (0,3,Now())'');
foreach( $pdo->query(''SELECT * FROM soFoo'', PDO::FETCH_ASSOC) as $row ) {
echo join('' | '', $row), "/n";
}
Que (actualmente) imprime
1 | 0 | 1 | 2012-03-23 16:00:18
2 | 0 | 2 | 2012-03-23 16:00:18
3 | 0 | 3 | 2012-03-23 16:00:18
Y aquí está (casi) el mismo script usando un campo TIMESTAMP y DEFAULT CURRENT_TIMESTAMP:
<?php
$pdo = new PDO(''mysql:host=localhost;dbname=test;charset=utf8'', ''localonly'', ''localonly'');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->exec(''
CREATE TEMPORARY TABLE soFoo (
id int auto_increment,
first int,
last int,
whenadded TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
primary key(id)
)
'');
$pdo->exec(''INSERT INTO soFoo (first,last) VALUES (0,1)'');
$pdo->exec(''INSERT INTO soFoo (first,last) VALUES (0,2)'');
sleep(1);
$pdo->exec(''INSERT INTO soFoo (first,last) VALUES (0,3)'');
foreach( $pdo->query(''SELECT * FROM soFoo'', PDO::FETCH_ASSOC) as $row ) {
echo join('' | '', $row), "/n";
}
Convenientemente, la marca de tiempo se convierte a la misma representación de cadena de fecha y hora que en el primer ejemplo, al menos con mi versión de PHP / PDO / mysqlnd.
NOW () normalmente funciona en sentencias de SQL y devuelve la fecha y la hora. Compruebe si su campo de base de datos tiene el tipo correcto (fecha y hora). De lo contrario, siempre puede usar la función PHP date () e insertar:
date(''Y-m-d H:i:s'')
Pero no recomendaría esto.
ahora()
trabajó para mi . pero mi tipo de campo es solo fecha y el tuyo es fecha y hora . No estoy seguro si este es el caso
¿Qué pasa con SYSDATE ()?
<?php
$db = mysql_connect(''localhost'',''user'',''pass'');
mysql_select_db(''test_db'');
$stmt = "INSERT INTO `test` (`first`,`last`,`whenadded`) VALUES ".
"(''{$first}'',''{$last}'',''SYSDATE())";
$rslt = mysql_query($stmt);
?>
Mire la diferencia entre NOW (), SYSDATE () y CURRENT_DATE () en MySQL para obtener más información acerca de NOW () y SYSDATE ().