我们知道我们可以使用类似的CDbCommand在yii中构建查询
where('id=:id1 or id=:id2', array(':id1'=>1, ':id2'=>2))
我在第91页的《yii-guide-1.15》中找到了这一点。
事实上,以下样式也会起作用:
where('id=:id1 or id=:id2', array('id1'=>1, 'id2'=>2))
有人能说出有什么区别吗?非常感谢!
在参数名称之前应用前导冒号是安全的,因为这是必需的,但如果您会错过这个前导冒号,那么PHP会在参数名称前面内部附加冒号。
所以最好的方法是这个
where('id=:id1 or id=:id2', array(':id1'=>1, ':id2'=>2))
感谢
为了避免SQL注入攻击并提高执行重复使用的SQL语句的性能,可以"准备"一个带有可选参数占位符的SQL语句,这些占位符将在参数绑定过程中用实际参数替换。
参数占位符可以是命名的(表示为唯一标记)或未命名的(代表为问号)。调用CDbCommand::bindParam()或CDbCommand::bindValue(),用实际参数替换这些占位符。参数不需要引用:底层数据库驱动程序为您提供。参数绑定必须在执行SQL语句之前完成。