Frage PHP auf Zend, wie man eine Variable für eine Abfrage entkommt?


Ich mache einige Abfragen in Zend Framework und ich muss sicherstellen, dass keine SQL-Injektion in der nächsten Art von Formaten möglich ist. Ich kann mysql_escape (veraltet) verwenden und mache nicht die ganze Arbeit. Wenn ich versuche, real_mysql_escape zu verwenden, wird es nicht in der Lage sein, die Verbindung mit der Datenbank zu finden, und ich kann nicht finden, wie zend_filter das Problem lösen würde.

Die Abfrage im Doing (simplied) hat die nächsten sintaxes:

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

Was ist der beste Weg, um SQL INJECTION mit diesem Framework zu verhindern?


9
2018-03-28 18:30


Ursprung


Antworten:


Einfach:

$db->quote($username);

Damit:

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

17
2018-03-28 18:41



$sql = 'SELECT * FROM messages WHERE username LIKE ?';
$row = $db->fetchRow($sql, $username);

Referenz: http://framework.zend.com/manual/de/zend.db.html


14
2018-03-28 18:40



Wenn Sie mit einem Modell arbeiten, können Sie Folgendes verwenden:

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

1
2018-06-12 10:36