0

DB 呼び出し fetchAll に Zend の便利なメソッドを使用しています。これは、知識のある人なら知っているはずですが、クエリのパラメーター化を可能にする関数です。たとえば、クエリは次のようになります。

$query = "select * from user where email = ?"
$results = $this->_db->fetchAll($query, $email);

そして、これがパラメータ化を達成する方法です。

ただし、私のクエリは次のとおりです。

 $query = "select * from user where email in ("noLuck@hotmail.com", "hotmailsucks@gmail.com","gmailrocks@hotmail.com");

上記のクエリをパラメーター化するにはどうすればよいですか。これらのメールはユーザー入力であるため、単純に生のクエリに入れず、次の試行に失敗することはありません。

$query = "select * from user where email in ? ";
$this->_db->fetchAll($query, $commaSeparatedEmailList);

どこ$commaSeparatedEmailList = "(".implode("," , $emails).")";

何か案は ?

4

1 に答える 1

2

残念ながら、ZF はこれをどのように処理するかについて少し一貫性がありません。一部のクラスは配列パラメーターで動作しますが、残念ながらfetchAll()アダプター クラスはそれらの 1 つではありません。私が知っている2つの(少し面倒な)オプションがあります:

代わりにクエリの作成に切り替えますZend_Db_Select(正しく処理されます)。

$select = $db->select();
$select->from('user')
       ->where('email IN (?)', $email);

$db->fetchAll($select);

または固執しfetchAllて quoteInto を使用します。

$db->fetchAll("SELECT * FROM user WHERE ".$db->quoteInto('email IN (?)', $email));
于 2013-05-02T00:09:17.603 に答える