2011-05-20 16 views
39

En mi base de datos MySQL, tengo una tabla con la estructuraCómo insertar la fecha y hora actual en la base de datos MySQL usando un inserto de PHP consulta

username - varchar 
insert_time - timestamp 

Esta tabla fue creada en MySQL utilizando la herramienta phpMyAdmin y para la columna de insert_time , He mencionado el valor predeterminado como 0000-00-00 00:00:00.

Ahora el problema es que tengo que actualizar este valor por defecto con la fecha y hora actual más adelante, utilizando un script PHP.

He intentado hacer el siguiente código PHP:

$update_query = 'UPDATE db.tablename SET insert_time=now() '. 
       'WHERE username='.$somename; 

Cuando se ejecuta el script PHP, se produce un error, y es capaz de insertar cualquier cosa en la base de datos.

¿Qué estoy haciendo mal?

+0

he configurado un error personalizado para que se muestre si la consulta de inserción falla (usando un "o muere()" en la consulta) –

Respuesta

50

¿Qué mensaje de error te va?

supongo que el error real se debe a que la variable de PHP no se envuelve entre comillas. Pruebe esto

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='" .$somename . "'"; 
+4

¡sí! ese era el problema. Supongo que debería dormir ahora. es tarde por la noche aquí, IST. ¡De lo contrario, estos problemas se arrastrarán por todo el código! –

+2

NOW() es redundante, utilice UNIX_TIMESTAMP() –

+0

@NitinBansal, se puede proporcionar un enlace de MySQL donde dice es obsoleto? No puedo encontrar ninguna evidencia para su reclamo. –

7

se olvidó de poner la variable en la instrucción SQL sin comillas.

$update_query = 
     "UPDATE db.tablename SET insert_time=NOW() WHERE username='" .$somename."'"; 
13

Su uso de ahora() es correcto. Sin embargo, debe usar un tipo de comillas alrededor de toda la consulta y otra alrededor de los valores.

Puede modificar la consulta para utilizar comillas dobles al principio y al final, y comillas simples $somename:

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='$somename'"; 
+3

Esto es la solución, pero SIEMPRE debe escapar de las variables antes de incluirlas en las consultas de su base de datos. Consulte PDO http://php.net/pdo como una capa de abstracción de base de datos que puede ayudar con esto, o al menos ejecutar mysql_real_escape_string ($ somename) antes de insertarlo. – mjec

+0

@mjec: Tiene razón, pero lo dejé para evitar el desorden. El OP puede estar escapando de la entrada antes de la línea en cuestión, o puede que no sea una entrada del usuario en absoluto. –

+0

mejor: UNIX_TIMESTAMP() –

1

No me gusta ninguna de esas soluciones.

así es como lo hago:

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='" 
      . sqlEsc($somename) . "' ;"; 

Luego utilizo mi propia función sqlEsc:

function sqlEsc($val) 
{ 
    global $mysqli; 
    return mysqli_real_escape_string($mysqli, $val); 
} 
4

Este formato se utiliza para obtener fecha y hora actual y se almacena en MySQL

$date = date("Y-m-d H:i:s"); 

$update_query = "UPDATE db.tablename SET insert_time=".$date." WHERE username='" .$somename . "'"; 
Cuestiones relacionadas