2

比如说,我将遵循避免 sql 注入的良好做法。所以这不好:

      $query="SELECT id,tag  FROM tbl_tags WHERE tag LIKE '%".$tag."%' ORDER BY creation_time DESC LIMIT 0,10 ";

相反,我必须使用参数绑定:

     $query="SELECT id,tag  FROM tbl_tags WHERE tag LIKE :tag ORDER BY creation_time DESC LIMIT 0,10 ";
     $command =Yii::app()->db->createCommand($query);
 $command->bindParam(":tag", "%{$tag}%", PDO::PARAM_STR);
     $models = $command->queryAll();

但这会产生:致命错误:无法通过引用传递参数 2

我如何绑定这个面向 LIKE 的参数?

4

2 回答 2

2

尝试使用查询生成器。因此,您的查询将如下所示:

Yii::app()->db->createCommand()
    ->select('id, tag')
    ->from('tbl_tags')
    ->where('tag like :tag', array(':tag' => "%{$tag}%"))
    ->order('creation_time desc')
    ->limit('0, 10')
    ->queryAll()

如果您正在寻找一个好的练习,那就更好了。

PS:从iPhone回复,请原谅错别字。

于 2013-05-25T19:57:56.857 回答
0

通过阅读此功能的手册页或通过谷歌搜索错误消息。

两者都会告诉您必须使用 bindValue() 代替。

于 2013-05-24T03:24:36.710 回答