2012-02-29 5 views
6

Ho bisogno di eseguire questa query mysql in MySQLi DOP con bind parametr in PHP:Come inserire il record con la funzione MySQL NOW() in MySQLi con bind_param?

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

ho utilizzare lo script come questo, ma non inserisce publish_date correttamente.

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

inserisce il record nella colonna publish_date in questo modo: 0000-00-00 00:00:00

Come posso fare questo? Grazie in anticipo.

P.S: il tipo di colonna della data è datatime.

risposta

25

Non è un parametro della query, in quanto non è necessario fornire un valore a MySQL.

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

Inoltre: Il motivo che state finendo con '0000-00-00 00: 00: 00' introdotto non e 'che si stanno cercando di inserire la stringa ''NOW()'' piuttosto che un valore datetime riconoscibile. MySQL costringe la stringa a un valore datetime e il valore che sceglie è la data zero. – Hammerite

+0

Ma ... e la variabile in bind_param per fornire "NOW()" in bind_param? –

+0

@Pedro, non capisco la tua domanda. – Hammerite

2

Probabilmente si dovrebbe provare a utilizzare la funzione di data non 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

Il problema con questa soluzione è che se il database e il php non vengono eseguiti sullo stesso server, gli orologi potrebbero non essere sincronizzati. Ciò significa che NOW() (che prende il tempo dal server del database) e la data (che prende il tempo dal php/webserver) non sono gli stessi. Ho incontrato diversi problemi a causa di questo problema. Una soluzione dovrebbe essere sincronizzata tutte le volte usando ntp. – theomega

+0

@theomega non ha visto quello se il database e php/webserver erano su server diversi utilizzando lo script di sincronizzazione dell'ora ntp risolverà il problema – smilezjim