PDO 防止 SQL 注入示例

PDO 防注入的原理:将查询语句和具体的参数值分开发送到数据库服务器,在语句执行前参数值不会被解析。

示例代码:

$dbh = new PDO("mysql:host=localhost; dbname=demo", "user", "pass");
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //禁用prepared statements的仿真效果
$dbh->exec("set names 'utf8'"); 
$sql="select * from test where name = ? and password = ?";
$stmt = $dbh->prepare($sql); 
$exeres = $stmt->execute(array($testname, $pass)); 
if ($exeres) { 
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    print_r($row);
}
}
$dbh = null;

注意:占位符代替的值只能是需要用户输入的参数值,而不能是一组值(例如 in( ?))、数据表名或列名(例如 order by ?)或其他 sql 语法。

Enjoy it !

posted @ 2020-10-19 11:31  兴同学在上海  阅读(187)  评论(0编辑  收藏  举报