2012-09-06 4 views
0

나는 this calendar 플러그인을 사용하여 mySQL db를 사용하여 내 고객의 일정을 표시합니다. 캘린더에 게시물이 같은 startend UNIX 타임 스탬프 내 스크립트에 요청 : 내 스크립트에서DATEDIFF를 사용하여 행을 선택하는 방법은 무엇입니까?

/getevents.php?start=1262332800&end=1265011200&_=1263178646 
//That last piece of data is to prevent caching.. apparently 

, 나는 MySQL로 datetime 목적이 같은 유닉스 타임 스탬프로 변환 :

$start = $_GET['start']; 
$end = $_GET['end']; 
$start = gmdate("Y-m-d H:i:s", $start); 
$end = gmdate("Y-m-d H:i:s", $end); 
printf($start.".....".$end); 

이를 다음과 같은 내용이 올바르게 인쇄됩니다 (2012 년 9 월까지 이동).

2012-08-26 04:00:00.....2012-10-07 04:00:00 

이제 해당 날짜 사이에있는 모든 이벤트를 데이터베이스에서 선택하려고합니다. 내 데이터베이스는 1 개 행을 가지고 있으며, start 필드 오늘의 날짜 :

id  start     end 
10  2012-09-05 20:27:00  0000-00-00 00:00:00 

그러나 다음과 같은 SQL 문을

, 나는 결과를 얻을 수 없습니다. 나는 ><에 반전 시키려고 시도했지만, 그저 아무것도 할 필요가 없다. 전혀 오류가 없으며 결과가 없습니다. 당신이 볼 수 있듯이

$sql = "SELECT * FROM all_events WHERE DATEDIFF('$start', 'start') > 0"; 
$result = mysql_query($sql, $link) or die(mysql_error()); 
echo "Rows:".mysql_num_rows($result); 

, 지금 난 그냥 이벤트의 start 달력의 날짜 범위의 start이 .. 즉, 당당한 26 년 9 월의 월의 start보다 크다는 것을 확인하고있다.

아무 것도 보이지 않습니다 ... 도와주세요! 나는 머리카락을 찢어 버리고있어!

+0

"SELECT * FROM 테이블 WHERE DATEDIFF ($ end, $ start)> 0"즉, 양수 인 –

답변

1

SELECT * FROM all_events WHERE DATEDIFF(`start`, '$start') > 0 
+0

* facepalm * 물건이 이렇게 단순 할 때 나는 그것을 싫어한다! 고맙습니다! – Snailer

+0

@Snailer 당신은 지금 자야합니다 :) 당신은 환영합니다! –

1

난과 같이 FROM_UNIXTIME 및 준비된 문을 사용하는 것이 좋습니다 열 이름에 대한 single quotes을 사용하는 대신 backticks .try를 사용하지 마십시오 :

$stmt = $mysqli->prepare("SELECT * FROM all_events WHERE DATEDIFF(FROM_UNIXTIME(?), start) > 0"); 
$stmt->bind_param($_GET['start']); 

mysql_ 기능 deprecated 인하는

+0

'mysql_' 함수가 더 이상 사용되지 않는다는 것을 알고 있습니다.'mysqli_'를 사용하여 제 코드를 심각하게 어리둥절하게 만들었습니다. 나는 적어도 내 클라이언트를 위해 일들을 실행하려고 시도 할 것이고, 업데이트에 대해 걱정할 것이다. 정보 주셔서 감사합니다! – Snailer

관련 문제