2009-03-28 4 views
8

메신저 젠드 프레임 워크에서 몇 가지 쿼리를하고 난 SQL 주입이 다음 종류의 형식에서 가능한지 확인해야합니다. 나는 mysql_escape (deprecated)를 사용할 수 있으며, 모든 작업을 수행하지 않을 것이다. 내가 real_mysql_escape을 사용하려고하면 데이터베이스와 연결을 잡을 수 없을 것이고 zend_filter가 어떻게 문제를 해결할 수 있는지 찾아 낼 수 없을 것이다.PHP에서 젠드, 어떻게 쿼리에 대한 변수를 탈출?

쿼리 메신저 다음 sintaxes이 (간체) 일 :

$db = Zend_Registry::get('db'); 
    $select = "SELECT COUNT(*) AS num 
       FROM message m 
       WHERE m.message LIKE '".$username." %'"; 
    $row = $db->fetchRow($select); 

이 프레임 워크와 SQL 주입을 방지하는 가장 좋은 방법은 무엇입니까?

답변

17

쉬운 : 그래서

$db->quote($username); 

:

$username = $db->quote($username . '%'); 
    $select = 'SELECT COUNT(*) AS num 
           FROM message m 
           WHERE m.message LIKE ' . $username; 
    $row = $db->fetchRow($select); 
+0

내가 삽입 할 문자열에 $ db-> quote를 사용하면 문자열에도 데이터베이스 필드에 따옴표를 넣습니다. 나는 그것을 인용 한 후에 그것을 자르거나, 그것을 잘못 사용하고 있습니까? – Gisheri

1

모델로 작업 사용할 수 :

$bugs = new Bugs(); 
$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1));