Sql 无法将参数绑定到CDbCommand

Sql 无法将参数绑定到CDbCommand,sql,database,pdo,yii,dbcommand,Sql,Database,Pdo,Yii,Dbcommand,比如说,我将遵循避免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 LIMI

比如说,我将遵循避免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


如何绑定此类似定向参数?

请阅读此函数的手册页或通过谷歌搜索错误消息


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

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

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()
如果你正在寻找一个好的实践,那就更好了


注意:iPhone回复,请原谅打字错误。

yii的文档记录不完整。我仍然不知道bindParam()和bindValue()之间有什么区别。不过,通过稍微修改参数,问题就解决了:$tag='%$tag%';然后我可以使用bindParam(),它不是yii,而是PDO,它在PHP手册中有完美的文档记录