10

Zend Framework でいくつかのクエリを実行していますが、次の種類の形式で SQL インジェクションが不可能であることを確認する必要があります。私は mysql_escape (非推奨) を使用できますが、すべての作業を行うわけではありません。real_mysql_escape を使用しようとすると、データベースとの接続を取得できず、zend_filter が問題を解決する方法がわかりません。

私が行っている(単純化された)クエリには、次の構文があります。

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

このフレームワークで SQL インジェクションを防ぐ最善の方法は何ですか?

4

3 に答える 3

19

簡単:

$db->quote($username);

そう:

   $username = $db->quote($username . '%');
   $select = 'SELECT COUNT(*) AS num
                                FROM message m
                                WHERE m.message LIKE ' . $username;
   $row = $db->fetchRow($select);
于 2009-03-28T18:41:08.050 に答える
14
$sql = 'SELECT * FROM messages WHERE username LIKE ?';
$row = $db->fetchRow($sql, $username);

参考: http: //framework.zend.com/manual/en/zend.db.html

于 2009-03-28T18:40:48.737 に答える
1

モデルを操作するときは、次を使用できます。

$bugs = new Bugs();
$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1));
于 2013-06-12T10:36:21.337 に答える