2012-05-07 1 views
2

지난 3 일 동안 해당 상점이 시작된 경우에만 내 데이터베이스에서 판매자 정보를 가져 오는 쿼리를 만들려고합니다. 쿼리의 날짜를 계산하는 가장 쉬운 방법은 new DateTime() 개체를 사용하는 것입니다. 테스트를 위해 코드를 출력 할 때 MySQL에 쿼리하기위한 적절한 문자열이 있지만 변수를 바인딩하려고 할 때마다 오류가 발생합니다. 내가보기에 $dateMod를 할당 할 때mysql 쿼리에서 PHP DateTime 개체 사용

public function indexAction() 
{ 
    $dateMod = new DateTime(); 
    $dateMod->modify('-2 days'); 
    $dateMod->format('Y-m-d H:i:s'); 


    // get sellers initialized in last 3 days 
    $sellerTable = new Application_Model_DbTable_Sellers(); 
    $select = $sellerTable->select()->setIntegrityCheck(false); 
    $select->from(array('s' => 'seller'),array('sellerID', 'businessName')); 
    // select firstName, lastName, picture from user table, and businessName and sellerID from seller table. 
    $select->join(array('u' => 'user'), 's.userID = u.userID', array('firstName', 'lastName', 'picture')); 
    $select->where('s.active = 1 AND s.contentApproval = 1 AND s.paymentApproval = 1 AND s.featured = 1'); 
    $select->where('s.launchDate > ?', $dateMod); 
    $select->order('s.launchDate DESC'); 
    $newSellers = $sellerTable->fetchAll($select); 

, 올바른 Y-m-d H:i:s 형식을 출력합니다 나는 (PDO 어댑터)

액션, 쿼리 Zend_Db을 사용하고 있습니다. 내가 쿼리에 연결하면, 나는 다음과 같은 오류 얻을 : 나는 MySQL의 타임 스탬프 형식으로 dateMod에 값을 하드 코딩하는 경우

Message: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY `b`.`launchDate` DESC' at line 2 

를 쿼리가 잘 작동합니다. DateTime 객체의 타임 스탬프 문자열 값에 어떻게 액세스합니까? getTimestamp은 형식을 지정한 후에도 유닉스 형식의 타임 스탬프를 반환합니다.

+0

가 왜 MySQL은 자신의 날짜 함수를 사용? –

+0

왜 mysql을 사용하지 않습니까? ADDDATE http://www.roseindia.net/sql/sqldate/sql-date-add.shtml – Grumpy

+0

일반적으로 날짜에는 mysql 함수를 사용하지 마십시오. 나는 클라이언트가 종종 날짜 함수에 대해 마음을 바꾸고 그것을 SQL에 직접 두는 것이 변화가 일어 났을 때 많은 편집을 의미한다는 것을 알았다. PHP로 할 경우, 다른 매개 변수를 전달하여 하위 시간 함수로 시간 함수를 추가하고 사이트 관리자가 할당 할 수있는 프런트 엔드 기능에이를 할당 할 수 있습니다. 전망. 하지만 그렇습니다. –

답변

2

format() 기능 반환 포맷 된 날짜, 쿼리에 사용하기 위해 변수에 그 할당해야하므로 :

$dateFormatted = $dateMod->format('Y-m-d H:i:s'); 

$select->where('s.launchDate > ?', $dateFormatted);