2009-03-28 9 views
8

Zrobić pewne pytania w Zend Framework i muszę upewnić się, że SQL injection nie jest możliwe w następnym rodzaju formatów. Mogę użyć mysql_escape (przestarzałe) i nie wykonuję całej pracy. Jeśli spróbuję użyć pliku real_mysql_escape, nie będzie on mógł pobrać połączenia z bazą danych i nie mogę znaleźć rozwiązania problemu zend_filter.PHP na zend, jak uciec zmiennej dla zapytania?

IM zapytanie robi (simplied) mają kolejne sintaxes:

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

Co jest najlepszym sposobem zapobiegania SQL Injection w tym kontekście?

Odpowiedz

17

proste:

$db->quote($username); 

Więc:

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

Kiedy używam $ db-> quote na łańcuchu, który wstawiam, umieszcza cudzysłowy w łańcuchu, nawet w polu bazy danych. Czy muszę go przycinać po cytowaniu, czy też używam go niepoprawnie? – Gisheri

1

Podczas pracy z modelem, można użyć:

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