如何在Yii框架中使用mysql_escape_string()?

Bal*_*ala 5 php mysql pdo yii mysql-escape-string

众所周知,我们不能在Yii等框架中使用原始MySQL查询.我想mysql_escape_string在我的项目中使用,该项目在Yii框架中运行,以摆脱用户输入中的SQL注入.

我知道mysql_escape_string在PHP 5.5中已弃用,我有一个PDO替代方案.Yii框架中的替代方法是什么,以及mysql_escape_string()的PDO方式是什么?

Jon*_*oni 8

mysql_escape_stringPDO中的替代方法是使用预准备语句.以Yii为例:

$user = Yii::app()->db->createCommand()
    ->select('username, password')
    ->from('tbl_user')
    ->where('id=:id', array(':id'=>$_GET['userId']))
    ->queryRow();
Run Code Online (Sandbox Code Playgroud)

(来自Yii参考文档http://www.yiiframework.com/doc/api/1.1/CDbCommand)

通过准备语句中的占位符传递参数时,可以保护您免受SQL注入.


bod*_*di0 5

最好使用预准备语句进行自动参数转义。然而,CDbConnection 的这种方法也应该能达到目的:

Yii::app()->db->quoteValue($your_value);
Run Code Online (Sandbox Code Playgroud)

本质上,这引用了一个在查询中使用的字符串值,它是PDO::quote().

在这里阅读更多内容。