2009-03-28 34 views
8

im thực hiện một số truy vấn trong khung công tác Zend và tôi cần đảm bảo không có khả năng tiêm SQL trong loại định dạng tiếp theo. Tôi có thể sử dụng mysql_escape (không được chấp nhận) và sẽ không thực hiện tất cả công việc. Nếu tôi cố gắng sử dụng real_mysql_escape nó sẽ không thể lấy conection với cơ sở dữ liệu và tôi không thể tìm thấy cách zend_filter sẽ giải quyết vấn đề.Php trên zend, làm thế nào để thoát khỏi một biến cho một truy vấn?

Các im truy vấn làm (Giản thể) có sintaxes tiếp theo:

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

cách tốt nhất để ngăn chặn SQL INJECTION với khuôn khổ này là gì?

Trả lời

17

dễ dàng:

$db->quote($username); 

Vì vậy:

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

khi tôi sử dụng $ db-> quote trên một chuỗi mà tôi đang chèn, nó đặt dấu ngoặc kép vào chuỗi ngay cả trong trường cơ sở dữ liệu. Tôi có phải cắt nó sau khi tôi trích dẫn nó, hoặc tôi đang sử dụng nó không chính xác? – Gisheri

1

Khi làm việc với một mô hình mà bạn có thể sử dụng:

$bugs = new Bugs(); 
$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1)); 
Các vấn đề liên quan