2013-05-07 4 views
2

다음과 같이 mysql 데이터베이스에서 레코드를 추출하는 함수가 있습니다. 구문 오류 또는 액세스 위반 :mysql datetime 필드와 datetime 문자열을 비교하십시오.

function getMember($read, $selected_joined_date) { 
    $sql = "SELECT first_name, last_name, member.joined_date 
      FROM user 
      INNER JOIN member USING (user_id) 
      WHERE user.joined_date > $selected_joined_date 
      ORDER BY joined_date"; 
    return $read->fetchAll($sql); 
} 

그것은

'SQLSTATE [42000]로 표시되는 에러 메시지 dipslays.

필드 'joined_date'는 테이블의 datetime 형식이며 $ selected_joined_date는 문자열 형식입니다.

다른 유형의 datetime 형식을 어떻게 비교합니까? mysql에서 제공

+0

$ sql 쿼리를 실행하는 코드는 어디에 있습니까? 그리고'$ selected_joined_date '의 값은 어떻게 생겼습니까?post'echo $ selected_joined_date; ' – peterm

+0

'$ selected_joined_date'의 출력 형식은 어떻게됩니까? – MISJHA

+0

$ selected_joined_date의 출력 형식의 예는 2013-03-25 12:30:54 – user2359714

답변

0

당신이 사용할 수있는 날짜() 함수는

 mysql> SELECT DATE('2003-12-31 01:02:03'); 
     -> '2003-12-31'

를 최신으로 문자열 형식을 변환하는 그리고 당신의 쿼리는 다음과 같이 표시됩니다 있어 MySQL을 해결, 당신은 STR_TO_DATE 기능 as을 사용할 수 있습니다;

mysql>select str_to_date('2012-10-12 10:20:30','%Y-%m-%d %H:%i:%s'); 

그래서는 SQL 문자열이 될 것입니다

,

$sql = "SELECT first_name, last_name, member.joined_date 
     FROM user 
     INNER JOIN member USING (user_id) 
     WHERE user.joined_date >str_to_date('$selected_joined_date','%Y-%m-%d %H:%i:%s') 
     ORDER BY joined_date"; 
// Provided that string selected_joined_date is in format 2012-10-12 10:20:30 
+0

joined_date는 날짜/시간 형식입니다. 그래서 시간을 비교할 필요가있다. – user2359714

+0

코드가 바뀌 었는지 확인한다.이 포스트를 사용하고있다. (http://stackoverflow.com/questions/8063057/convert-this-string-to-datetime?answertab=oldest#tab -top) – progrrammer

+0

도 작동하지 않습니다 – user2359714

0

당신은 쿼리에서 문자열 따옴표가 필요합니다.

$sql = "SELECT first_name, last_name, member.joined_date 
     FROM user 
     INNER JOIN member USING (user_id) 
     WHERE user.joined_date > '$selected_joined_date' 
     ORDER BY joined_date"; 
+0

해결. 고마워요! – user2359714

+0

여러분을 환영합니다! :-) –

0

mysql은 "2013-05-07 15:30:00"형식의 datetimes를 좋아합니다. php는 거의 모든 것을 처리 할 수 ​​있습니다.

$selected_join_date = date("Y-m-d H:i:s", strtotime($selected_join_date)); 

가정 $의 selected_join_date는 PHP의 승인 형식 중 하나입니다 :

당신과 같이 해당 형식에 $의 selected_join_date 변환 할 http://www.php.net/manual/en/datetime.formats.php

그런 다음 당신은 MySQL로 문자열을 전달할 수 있으며 행복하게 것이다 그들을 비교하십시오. Rocket Hazmat가 지적했듯이 변수 (따라서 문자열 날짜 시간)는 sql에서 따옴표 안에 있어야합니다.

0

php 날짜 형식이 mysql datetime 형식과 동일해야하는지에 대한 호기심을 조금 테스트했습니다. 형식이 중요하지 않습니다. PHP 변수가 Mysql Date and Time 형식 인 경우 검색에 성공했습니다.

기본 MySQL의 날짜 형식 : 쿼리에서 해당 $selected_joined_date 변수가 될 필요가 제외 DateTime::createFromFormat() 기능

문제로 포맷

'Y-m-d H:i:s' 
'Y/m/d H:i:s' 
'Y/m/d' 
'YmdHis' 
'Ymd' 

날짜 : 데이터베이스를 검색에 사용

YYYY-MM-DD HH:MM:SS 

형식 내부 따옴표는 다른 곳에있는 것으로 보입니다.