【PHP】使用参数绑定防止SQL注入
来源:互联网 发布:安卓 知乎 编辑:程序博客网 时间:2024/05/15 23:57
<html><head><title>Sql注入演示</title><meta http-equiv="content-type" content="text/html;charset=utf-8"></head><body ><form action="" method="post"> <fieldset> <legend>Sql注入演示</legend> <table> <tr> <td>用户名:</td> <td><input type="text" name="username"></td> </tr> <tr> <td>密 码:</td> <td><input type="text" name="password"></td> </tr> <tr> <td><input type="submit" value="提交"></td> <td><input type="reset" value="重置"></td> </tr> </table> </fieldset></form></body></html><?php if($_POST['username']){ try{ $pdo = new PDO('mysql:host=localhost;dbname=mydb', 'root', 'root'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ die($e->getMessage()); } try{ /** * MySQL预处理和绑定 * 当一条SQL被提交到MySQL的时候并不是立即执行,而是要先被编译为数据库可识别的指令然后再执行 * 预处理的原理是先编译SQL,然后等待数据的传入,这样,当用户输入例如' or 1=1 #'的数据的时候 * 该数据就仅仅作为数据被传入,而不再是SQL语句的一部分,从而达到预防注入的作用 */ $sql = "select * from users where user=:user and password=:password"; $stmt = $pdo->prepare($sql);//对SQL进行预处理(编译) //绑定参数 $stmt->bindParam(':user', $_POST['username']); $stmt->bindParam(':password', $_POST['password']); //执行命令 $stmt->execute(); if($stmt->rowCount()){ echo "登陆成功!"; }else{ echo "您的用户名或密码输入有误,请重新登录!"; } }catch(PDOException $e){ die($e->getMessage()); } }?>
关于预处理提升SQL效率
过去天真的以为使用PDO的预处理,因为SQL语句编译一次,相对于多条SQL语句,在连续的插入的情况下会提升效率。但在最近的试验中发现并非如此
两套复杂度相同的代码,连续插入5W条数据,在最后的执行结果并未有太大差异
未使用预处理的代码片段
$i=0; while($i < 50000){ $user = $password = $email = mt_rand(); $sql = "insert into users(user, password, email)values('{$user}', '{$password}', '{$email}')"; $pdo->query($sql); $i++; }
使用预处理代码片段
$i=0; $sql = "insert into users(user, password, email)values(:user, :password, :email)"; $stmt = $pdo->prepare($sql); while ($i < 50000) { $param['user'] = $param['password'] = $param['email'] = mt_rand(); $stmt->execute($param); $i++; }
最终执行时间对比未使用预处理使用预处理[root@localhost pdo]# time php test3.php
real 0m49.901s
user 0m0.118s
sys 0m6.046s[root@localhost pdo]# time php test4.php
real 0m49.101s
user 0m0.140s
sys 0m6.111s
0 0
- 【PHP】使用参数绑定防止SQL注入
- sql参数绑定防止注入
- sql参数绑定防止注入
- mysql使用bind_param()参数绑定来防止SQL注入攻击
- PHP 防止 SQL 注入
- php防止sql注入
- php防止sql注入
- php 防止sql注入
- php防止sql注入
- PHP 防止SQL注入
- php防止sql注入
- php防止sql注入
- PHP防止sql注入
- php 防止sql注入
- PHP防止SQL注入
- php防止sql注入
- 使用参数化查询防止SQL注入漏洞
- 使用参数化查询防止SQL注入漏洞
- iOS之UINavigationBar的使用
- 【数据库系统概论】-关系数据库
- div width和height 100%设定
- spring使用注解方式的初始化流程
- [wordpress搬家]Android 基础 — 状态栏
- 【PHP】使用参数绑定防止SQL注入
- window7 修改 mysql5.6 my.ini 重启mysql服务没有效果
- Android破解Ubuntu环境搭配
- 怎么创业赚取你人生第一桶金????
- btrfs
- php 使用phpqrcode类生成二维码
- Data Matrix码
- modelsim的使用简明步骤
- object-c块(block)