PDO防止SQL注入具体介绍

使用PDO防止SQL注入
本文介绍如何通过PHP的PDO扩展来有效地防止SQL注入攻击。PDO提供的预处理语句功能允许开发者将查询语句与实际参数分离,从而确保即使用户输入有害数据也不会影响数据库的安全性。然而,需要注意PDO并不能防范所有类型的SQL注入风险。
<span style="font-size:18px;"><?php
$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 = ?

"; //也能够用:neme这样的形式 $stmt = $dbh->prepare($sql); $exeres = $stmt->execute(array($testname, $pass)); if ($exeres) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { print_r($row); } } $dbh = null; //多说一嘴:  当调用 prepare() 时,查询语句已经发送给了数据库server。此时仅仅有占位符 ? 发送过去。没实用户提交的数据;当调用到 execute()时。用户提交过来的值才会传送给数据库,他们是分开传送的。两者独立的,SQL攻击者没有一点机会。 可是我们须要注意的是下面几种情况,PDO并不能帮助你防范SQL注入 1、你不能让占位符 ? 取代一组值,如: SELECT * FROM blog WHERE userid IN ( ? ); 2、你不能让占位符取代数据表名或列名。如: SELECT * FROM blog ORDER BY ?; 3、你不能让占位符 ?

取代不论什么其它SQL语法,如: SELECT EXTRACT( ?

FROM datetime_column) AS variable_datetime_element FROM blog; </span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值