PHP中使用PDO的预处理功能避免SQL注入
不使用预处理功能
<?php
$id = $_GET['id'];
$dsn = 'mysql:host=localhost;port=3306;dbname=database';
try {
$pdo = new PDO($dsn, $user, $pass);
$sql = 'SELECT * FROM table where id = ' . $id;
$stmt = $pdo->query($sql);
$data = $stmt->fetchALL(PDO::FETCH_ASSOC);
var_dump($data);
$stmt->closeCursor();
} catch (PDOException $e) {
var_dump($e->getMessage());
}
使用匿名占位符预处理
<?php
$id = $_GET['id'];
$dsn = 'mysql:host=localhost;port=3306;dbname=database';
try {
$pdo = new PDO($dsn, 'user', 'pass');
$sql = 'SELECT * FROM table where id = ?';
$stmt = $pdo->prepare($sql);
$stmt->execute([$id]);
$data = $stmt->fetchALL(PDO::FETCH_ASSOC);
var_dump($data);
$stmt->closeCursor();
} catch (PDOException $e) {
var_dump($e->getMessage());
}
使用命名占位符预处理
<?php
$id = $_GET['id'];
$dsn = 'mysql:host=localhost;port=3306;dbname=database';
try {
$pdo = new PDO($dsn, 'user', 'pass');
$sql = 'SELECT * FROM table where id = :id';
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $id);
$stmt->execute();
$data = $stmt->fetchALL(PDO::FETCH_ASSOC);
var_dump($data);
$stmt->closeCursor();
} catch (PDOException $e) {
var_dump($e->getMessage());
}
<?php
$foo = $_GET['foo'];
$bar = $_GET['bar'];
$dsn = 'mysql:host=localhost;port=3306;dbname=database';
try {
$pdo = new PDO($dsn, 'user', 'pass');
$sql = 'UPDATE table set column_foo = ? where column_bar = ?';
$stmt = $pdo->prepare($sql);
$stmt->bindParam(1, $foo);
$stmt->bindParam(2, $bar);
$stmt->execute();
$data = $stmt->rowCount();
var_dump($data);
$stmt->closeCursor();
} catch (PDOException $e) {
var_dump($e->getMessage());
}
PHP中使用PDO的预处理功能避免SQL注入的更多相关文章
- MySQL pdo预处理能防止sql注入的原因
MySQL pdo预处理能防止sql注入的原因: 1.先看预处理的语法 $pdo->prepare('select * from biao1 where id=:id'); $pdo->e ...
- 如何使用PDO查询Mysql来避免SQL注入风险?ThinkPHP 3.1中的SQL注入漏洞分析!
当我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制.虽然可以用mysql_real_escape_ ...
- 2017-07-25 PDO预处理以及防止sql注入
首先来看下不做任何处理的php登录,首先是HTML页面代码 <html> <head><title>用户登录</title></head> ...
- mybatis中#{}与${}的差别(如何防止sql注入)
默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义. # ...
- 预处理(防止sql注入的一种方式)
<!--- 预处理(预编译) ---><?php/* 防止 sql 注入的两种方式: 1. 人为提高代码的逻辑性,使其变得更严谨,滴水不漏. 比如说 增加判断条件,增加输入过滤等,但 ...
- mybatis中的#和$的区别 以及 防止sql注入
声明:这是转载的. mybatis中的#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sq ...
- PDO预处理语句规避SQL注入攻击
所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存 ...
- 为什么说Mysql预处理可以防止SQL注入
简单点理解:prepareStatement会形成参数化的查询,例如:1select * from A where tablename.id = ?传入参数'1;select * from B'如果不 ...
- Servlet课程0425(七) 到数据库中去验证用户,同时防止SQL注入漏洞
Login.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class ...
随机推荐
- Python 字符串,元祖,列表之间的转换
1.字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 = 'Hello World!' 2. ...
- java爬取并下载酷狗TOP500歌曲
是这样的,之前买车送的垃圾记录仪不能用了,这两天狠心买了好点的记录仪,带导航.音乐.蓝牙.4G等功能,寻思,既然有这些功能就利用起来,用4G听歌有点奢侈,就准备去酷狗下点歌听,居然都是需要办会员才能下 ...
- 怎样理解 Vue 中的计算属性 computed 和 methods ?
需求: 在 Vue 中, 我们可以像下面这样通过在 引号 或 双花括号 内写 js 表达式去做一些简单运算, 这是可以的, 不过这样写是不直观的, 而且在 html 中 夹杂 一些运算逻辑这种做法其实 ...
- url请求
--[[local g = require 'library.global'--__ml_ss = mlc.prefix.ml_psession..tostring(os.time());local ...
- winfrom 点击按钮button弹框显示颜色集
1.窗体托一个按钮button: 2.单击事件: private void btnForeColor_Click(object sender, EventArgs e) { using (ColorD ...
- bash 中 () {} [] [[]] (()) 的解释
bash 中 () {} [] [[]] (()) 的解释 来源 https://www.cnblogs.com/fhefh/archive/2011/04/16/2017895.html bash ...
- 解压版msyql8.0的安装和配置
一.环境变量配置 变量名:MYSQL_HOME 变量值:D:\mysql-8.0.12-winx64\bin 然后在Path变量开头添加%MYSQL_HOME%:然后确定保存即可: 二.配置my.in ...
- 关于VSS(Volume Shadow Copy Service)一
在开发windows VSS应用程序时 我们应该先下载相关SDK,微软描述如下 When developing your own VSS application, you should observe ...
- python中获取当前位置所在的行号和函数名(转)
http://www.vimer.cn/2010/12/%E5%9C%A8python%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E4%BD%8D%E7 ...
- git、github常用操作
1.将github项目拷贝到本地 $ git clone https://github.com/jim2500/miaosha_project.git 2.修改本地项目上传到github T470s@ ...