php 使用PDO,防止sql注入 简单说明
时间:2022-07-28
本文章向大家介绍php 使用PDO,防止sql注入 简单说明,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
PDO:php5
假如以下是一个简单的登录处理:
使用PDO连接mysql首先:
新建数据库
new PDO("mysql:host=localhost;dbname=test","root","root");
host:服务器 dbname:数据库名 后面两个分别是帐号和密码 默认不是长连接
如果想使用长连接需要在后面加入参数:
new PDO("mysql:host=host;dbname=name","user","pw","array(PDO::ATTR_PERSISTENT => true) ");
看如下简单示例,在这里是单独说明,所以我没有加其他的东西:
<?php
//接收前端传过来的变量
$name=$_POST['username'];
$pwd=$_POST['password'];
//这里新建PDO连接,在这里我是本地测试的所以host我使用了localhost 数据库名为test,帐号为root密码也是root
$stmt = new PDO("mysql:host=localhost;dbname=test","root","root");
//使用prepare进行预处理,其中:name和:pwd是我们等下要传入的变量值,这些都是占位符
$stmt = $stmt->prepare('SELECT * FROM user1 WHERE user1 = :name and pw1 = :pwd');
//以上的准备都做好了之后,我们使用execute()方法负责执行准备好的查询
//该方法需要有每次迭代执行中替换的输入参数,在这里就是:name和:pwd 作为数组将值传递给方法
//从而值替换掉其中占位符
//当然也可以使用bindParam,但是我还是喜欢这种简单的方式,毕竟人懒
$stmt->execute(array('name' => $name,'pwd'=>$pwd));
while ($row = $stmt->fetch()) {
print_r($row);
}
注释已经说明了要说的内容,最后面使用while输出查询到的值,这样就可以防止sql注入,如果不行,那么请自行测试,输入如:’ or 1=1# 我们看我们的’ or 1=1#,如果我们的name输入的是’ or 1=1#,注意 ’ or 1=1# 前面有一个单引号,那么如果我们的sql语句本是如下:
SELECT * FROM user1 WHERE user1='123' AND pw1='234'
把user1的值改为了 ’ or 1=1# 后。 变成了
SELECT * FROM user1 WHERE user1='' OR 1=1# and pw1='234'
其中由于sql中#代表:到此结束,那么说明后面的:and pw1=’234’都将无效,那么我们的sql语句就等于变成了如下语句:
SELECT * FROM user1 WHERE user1='' OR 1=1
由于1=1是肯定成立的,那么此句sql语句中的where条件将会永远正确,此时,语句变成或者说就等于了如下语句:
SELECT * FROM user1 WHERE TRUE
或者说:
SELECT * FROM user1
那么就会登录成功,绕过了此次登录。
- linux 添加用户到sudo中
- 机器学习之白话adaboost元算法
- 查看占用内存多的进程
- jboss EAP 6.2 + Message Drive Bean(MDB) 整合IBM Webshpere MQ 7.5
- 通过jenkins API去build一个job
- Django---分页器、中间件
- 启动jenkins服务错误
- 如果未来的AI拥有意识,你舍得不理它吗?
- centos下安装python3
- jboss:在standalone.xml中设置系统属性(system-properties)
- iptables
- Django-form表单
- 比较git commit 两个版本之间次数
- eclipse: workspace出错导致无法启用的解决
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 01 . Git常用命令及方法和分支管理
- 记一次公司mssql server密码频繁被改的事件
- elasticsearch 同义词更新,不同集群返回更新节点个数不一样
- H5应用加固防破解-js虚拟机保护方案浅谈
- struts2概述
- 移动端适配解决方案
- struts2(一)---编写第一个struts2项目
- Struts2(二)---将页面表单中的数据提交给Action
- 03 . Shell数组和函数
- Shell百宝箱(后续会不断更新)
- 09 . Prometheus监控tomcat+jvm
- 09 . Kubernetes之pv、pvc及使用nfs网络存储应用
- 10 . Kubernetes之Configmap,Secret
- struts2(三)---使用EL表达式,显示Action中的数据
- 02 . 分布式存储之FastDFS 高可用集群部署