2010-03-03 3 views
60

날짜 또는 시간 소인에 사용할 수있는 일부 PDO::PARAM_???이 있습니까?날짜에 대한 PDO :: PARAM?

샘플 코드 :

$sql = "UPDATE my_table SET current_date = :date WHERE id = 43"; 
$statement = $pdo->prepare ($sql); 
$statement->bindParam (":date", strtotime (date ("Y-m-d H:i:s")), PDO::PARAM_STR); 
$statement->execute(); 

답변

80

SQL 쿼리에 날짜를 쓰면 문자열로 쓰게됩니다. 준비된 문장으로도 똑같이해야하고, 제안한 코드 부분에서했던 것처럼 PDO::PARAM_STR을 사용해야합니다. "타임 스탬프"에 의한 경우

그리고 "타임 스탬프"에 대한

, 당신은 의미 :

  • MySQL의 타임 스탬프 데이터 타입 : 그것은 동일합니다, 당신은 string
  • PHP의 유닉스로 전달합니다 타임 스탬프는 정수로, int으로 전달합니다.
+1

ms 정밀도의 경우는 어떻게됩니까? – ManuelSchneid3r

4

아니. 날짜를 문자열로 처리하십시오.

15

php date 함수를 사용하여 날짜를 만들면이 문제가 해결됩니다.

$ handle-> execute (array (": date"=> 날짜 ("Y-m-d H : i : s", strtotime ($ date)), PDO :: PARAM_STR));

-3

이것은 나를 위해 일했습니다.

//MS SQL 
$sql = "UPDATE my_table SET current_date = GETDATE() WHERE id = 43"; 
$statement = $pdo->prepare ($sql); 
//$statement->bindParam (":date", strtotime (date ("Y-m-d H:i:s")), PDO::PARAM_STR); 
$statement->execute(); 
+1

mysql GETDATE 함수 대신 PHP에서 생성 한 날짜에 매개 변수를 바인딩하는 방법을 보여주지 않으면 많은 도움이되지 않습니다 ... –

-1

날짜를 문자열로 처리해야하지만, 매개 변수로 전달하기 전에 올바른 날짜인지 확인하는 함수를 만들 수 있습니다. 유사 항목 :

function checkValidDate($date, $format = "dd-mm-yyyy"){ 
      if($format === "dd-mm-yyyy"){ 
      $day = (int) substr($date,0,2); 
      $month = (int) substr($date, 3,2); 
      $year = (int) substr($date, 6,4); 

     }else if($format === "yyyy-mm-dd"){ 
      $day = (int) substr($date,8,2); 
      $month = (int) substr($date, 5,2); 
      $year = (int) substr($date, 0,4); 
     } 

     return checkdate($month, $day, $year); 
}