2014-04-16 2 views
0

내 응용 프로그램에서 온라인으로 지난 5 분간 온라인으로 회원 목록을 인쇄하고 싶습니다.간격이있는 ZF2 mysql 쿼리

아래 코드로 mysql 간격으로 만들려고했습니다.

$interval = 5; 
    $select->where(array('member_last_online > ?' => 'SUBDATE(NOW(), INTERVAL '.$interval.' MINUTE)')); 

이 통지를 보내는 사람.

Notice: Attempting to quote a value without specific driver level support can introduce security vulnerabilities in a production environment. in ..zf_path.. 

'getSqlSTring()'의 출력 결과는 다음과 같습니다. 나는 테이블에 아래 직접 쿼리를 실행하면

SELECT "members".* FROM "members" WHERE member_last_online > 'SUBDATE(NOW(), INTERVAL 5 MINUTE)' 

은 허용으로 데이터를 반환

SELECT members.* FROM members WHERE member_last_online > SUBDATE(NOW(), INTERVAL 5 MINUTE) 

내가 잘못 여기에서 무엇입니까?

+0

나는 당신이 다음과 같이 할 필요가 있다고 생각한다 : $ adapter-> platform-> quoteIdentifier ($ interv al)'여기 좀보세요 : http://stackoverflow.com/questions/13287731/quote-value-into-zend-framework-2 – Uffo

답변

1

당신은 경고를 피하기 위해 getSqlString()에 DB 플랫폼을 전달해야하는 (그래서 값을 인용하는 방법을 알고) :

// assuming $db is the DB adapter instance 
echo $select->getSqlString($db->getPlatform()); 

주요 질문에 대한 솔루션입니다 :

$select->where(new \Zend\Db\Sql\Predicate\Expression('SUBDATE(NOW(), INTERVAL '.$interval.' MINUTE)')); 

또는

use Zend\Db\Sql\Predicate\Expression; 

$select->where(new Expression('SUBDATE(NOW(), INTERVAL '.$interval.' MINUTE)')); 
+0

내 경우에는 'echo $ select-> getSqlString ($ this-> getAdapter () -> getPlatform()) '경고를 제거하는 데 일했다 :) – webcoder