2012-02-29 2 views
6

J'ai besoin pour exécuter cette requête mysql dans MySQLi PDO avec Parametr de liaison en PHP:Comment insérer l'enregistrement avec la fonction MySQL NOW() dans MySQLi avec bind_param?

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

J'utilise le script comme celui-ci, mais il n'insère pas publish_date correctement.

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

Il insère le disque dans la colonne comme publish_date ceci: 0000-00-00 00:00:00

Comment puis-je faire cela? Merci d'avance.

P.S: Le type de colonne de date est datatime.

Répondre

25

Ce n'est pas un paramètre de la requête, en ce sens que vous n'avez pas à fournir de valeur à MySQL.

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

De plus: La raison pour laquelle vous terminez avec '00 0000-00-00: 00: 00 'inséré est que vous essayez d'insérer la chaîne ''NOW() '' plutôt qu'une valeur datetime reconnaissable. MySQL contraint la chaîne à une valeur datetime, et la valeur qu'elle choisit est la date zéro. – Hammerite

+0

Mais ... et la variable dans bind_param pour fournir "NOW()" dans bind_param? –

+0

@Pedro, je ne comprends pas votre question. – Hammerite

2

vous devriez probablement essayer d'utiliser la fonction de date pas maintenant()

$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

Le problème avec cette solution est que si la base de données et le php ne fonctionnent pas sur le même serveur, les horloges peuvent ne pas être synchronisées. Cela signifie que NOW() (qui prend le temps du serveur de base de données) et la date (qui prend l'heure du php/webserver) ne sont pas les mêmes. J'ai rencontré plusieurs problèmes à cause de ce problème. Une solution serait de s synchroniser tout le temps en utilisant ntp. – theomega

+0

@theomega n'avait pas vu que si la base de données et php/webserver étaient sur des serveurs différents en utilisant ntp script de synchronisation de temps va résoudre le problème – smilezjim

Questions connexes