PHP之PDO预编译防SQL注入

本文介绍如何使用PHP PDO预处理机制来有效防止SQL注入攻击。通过示例代码展示预编译语句、变量绑定等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多对代码不熟悉的朋友总觉得PDO能够有效防止SQL注入,其实真正防止SQL注入的是php预处理,你可以使用mysqli面向对象预处理、面向过程预处理,也可以使用PDO预处理,其实真正起作用的还是预处理。下面的代码会表达出PDO预处理的精髓!

$dbms = 'mysql';
$db_host = 'localhost';
$db_user = 'root';
$db_pass = 'root';
$db_name = 'study';
$dsn = "$dbms:host=$db_host;dbname=$db_name";
$conn = new PDO($dsn,$db_user,$db_pass);
//判断数据库是否连接成功
if($conn->errorCode()){
	die("filed".$conn->errorInfo());
}

$sql = "select * from users where username = :name";
//预编译语句
$stmt = $conn->prepare($sql);
//定义要传入的变量(可以接收传过来的值)
$username='admin';
//将变量绑定到占位初
$stmt ->bindParam(':name',$username);
//执行sql语句
$stmt->execute();
// pdo预编译 占位符
// $sql = "select * from users where username=? ";
// $stmt = $conn->prepare($sql);
// $username = 'root';
//占位符通过变量绑定
// $stmt -> bindParam(1,$username);
// $stmt->execute();
// $stmt->bindColumn(3,$id);
// $stmt->bindColumn(2,$username);
// 占位符通过数组绑定
// $stmt ->execute([$username]);
// $stmt->bindColumn(3,$id);
// $stmt->bindColumn(2,$username);
//将对应的数据库对应的列绑定到变量上
$stmt->bindColumn(1,$pass);
$stmt->bindColumn(2,$user);
$stmt->bindColumn(3,$id);
//将数据取出
while($stmt->fetch()){
	echo $id."<br>";
	echo $username."<br>";
}
//释放内存资源
$stmt =null;
//断开连接
$conn = null;

需要转载的朋友请附本文连接,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anansec

打赏是我创作路上的加油剂!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值