2009-03-28 15 views
8

私はZend Frameworkでいくつかのクエリを実行しており、次の種類のフォーマットでSQLインジェクションが可能でないことを確認する必要があります。私はmysql_escape(廃止予定)を使用して、すべての作業を行うことはできません。私がreal_mysql_escapeを使用しようとすると、データベースとの接続を取得することができなくなり、zend_filterがどのように問題を解決するのかわかりません。php on zend、クエリの変数をエスケープする方法は?

クエリイムは、次の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)); 
関連する問題