yii CDb命令查询参数中使用的冒号是什么


What is the colon used for in yii CDbCommand query parameters?

我们知道我们可以使用类似的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语句之前完成。