2012-02-29 27 views
6

necesito para ejecutar esta consulta MySQL en MySQLi DOP con parametr se unen en PHP:¿Cómo insertar el registro con la función MySQL NOW() en MySQLi con bind_param?

mysql_query("INSERT INTO `posts` (post_name,publish_date) VALUES ($post_name,NOW()) ") 

utilizo el guión como este, pero no se inserta correctamente publish_date.

$publish_date = 'NOW()'; 
$insert = $mysqli->prepare("INSERT INTO posts (post_name,publish_date) VALUES (?,?)"); 
$insert->bind_param("ss", $post_name $publish_date); 
$insert->execute(); 

Se inserta el registro en la columna de la publish_date así: 0000-00-00 00:00:00

¿Cómo puedo hacer esto? Gracias por adelantado.

P.S: El tipo de columna de fecha es datatime.

Respuesta

25

No es un parámetro de la consulta, ya que no tiene que proporcionar un valor a MySQL.

$insert = $mysqli->prepare("INSERT INTO posts (post_name, publish_date) VALUES (?, NOW())"); 
+2

Además: La razón por la que estamos teniendo '0000-00-00 00: 00: 00' introducido es que están tratando de insertar la cadena ''NOW()'' en lugar de un valor de fecha y hora reconocible. MySQL fuerza la cadena a un valor de fecha y hora, y el valor que elige es la fecha cero. – Hammerite

+0

Pero ... ¿y la variable en bind_param para suministrar "NOW()" en bind_param? –

+0

@Pedro, no entiendo tu pregunta. – Hammerite

2

Probablemente debería intentar usar la función de la fecha no NOW()

$publish_date =date("Y-m-d H:i:s"); 
$insert = $mysqli->prepare("INSERT INTO posts (post_name,publish_date) VALUES (?,?)"); 
$insert->bind_param("ss", $post_name $publish_date); 
$insert->execute(); 
+1

El problema con esta solución es que si la base de datos y php no se ejecutan en el mismo servidor, es posible que los relojes no estén sincronizados. Esto significa que NOW() (que toma el tiempo del servidor de la base de datos) y la fecha (que toma el tiempo de php/webserver) no son lo mismo. Me encontré con varios problemas debido a este problema. Una solución sería sincronizar todo el tiempo usando ntp. – theomega

+0

@theomega no había visto eso si la base de datos y php/webserver estaban en servidores diferentes usando el script de sincronización de tiempo ntp resolverá el problema – smilezjim

Cuestiones relacionadas