2012-02-29 4 views
6

나는 PHP에 바인드 parametr와 MySQLi PDO이 MySQL의 쿼리를 실행해야합니다.

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

그것은이 같은 publish_date 열에 기록을 삽입 : 0000-00-00 00:00:00

내가 어떻게 할 수 있습니까? 미리 감사드립니다.

P.S : 날짜 열 유형은 datatime입니다.

답변

25

MySQL에 값을 제공 할 필요가 없다는 점에서 쿼리의 매개 변수가 아닙니다.

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

: 00 : 당신은'0000-00-00 00와 함께 종료되는 이유 00' 삽입 당신이다 인식 할 수있는 datetime 값이 아닌''NOW() ''문자열을 삽입하려고합니다. MySQL은 문자열을 datetime 값으로 강제 변환하며, 선택한 값은 0입니다. – Hammerite

+0

하지만 bind_param에서 "NOW()"를 제공하는 bind_param의 변수는 무엇입니까? –

+0

@ 페드로, 귀하의 질문에 이해가되지 않습니다. – Hammerite

2

은 아마 당신이 지금이 날짜 기능을 사용하려고한다() 또한

$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

이 솔루션의 문제점은 데이터베이스와 PHP가 동일한 서버에서 실행되지 않으면 시계가 동기화되지 않았을 수 있다는 것입니다. 즉, NOW() (데이터베이스 서버에서 시간 소요)와 날짜 (PHP/웹 서버에서 걸리는 시간)는 동일하지 않습니다. 이 문제로 인해 여러 문제가 발생했습니다. 해결책은 ntp를 사용하여 항상 동기화하는 것입니다. – theomega

+0

@theomega는 데이터베이스와 php/webserver가 ntp 시간 동기화 스크립트를 사용하여 다른 서버에 있으면 해당 문제를 해결할 수 없었습니다. – smilezjim