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 ...
随机推荐
- 点了安装SQL2000后没反应了的处理方法
摘自JerrY的博客 http://blog.sina.com.cn/s/blog_403ef7e80101iy3p.html 点了安装SQL2000后没反应了的处理方法 以前的时候给客户电脑安装SQ ...
- PDO原生分页
** PDO分页** 1.PDO连接数据库 $dbh=new PDO('mysql:host=127.0.0.1;dbname=03a','root','root');//使用pdo 2.接收页码 $ ...
- error: [Errno 13] Permission denied: '/usr/local/lib/处理方法
在ubuntu系统下使用pip 命令安装包时,出现以下类似错误提示: error: [Errno 13] Permission denied: '/usr/local/lib/python2.7/di ...
- Java 集合和泛型
一.集合(Collections) Java使用集合来组织和管理对象. 1.Java的集合类 集合类主要负责保存.盛装和管理对象,因此集合类也被称为容器类. 集合类分为Set.List.Map和Que ...
- 开发过程遇到的css样式问题记录
一.移动端 1.部分安卓机圆角border-radius失效,显示为方形状? background-clip: padding-box; 2.部分安卓机字体图标出现锯齿? 使用iconfont图标 ...
- js判断是否是对象获取子窗体值
判断是否是对象 Object.prototype.toString.call(obj) 装换为数组 Array.prototype.slice.call(obj) 父窗体获取值子窗体值$(functi ...
- 高德地图API-设置考勤范围
<template> <div class="page-setting-setgps"> <!--head--> <div class=& ...
- Python脚本带-的参数脚本
一.故事背景 由于先前的工作内容是做后台开发,对于脚本写的很少: 昨天参加面试遇到一道面试题,写一个python脚本: 通过脚本的后面的参数选项获取参数选项后面的字符串进行处理: 问题没记错的话大概是 ...
- Shell脚本case语句
case语句格式 case 变量 in PAT1) 执行语句 ;; PAT2) 执行语句 ;; *) 默认执行语句 ;; esac 使用示例: 编写一个shell脚本,通过提示用户输入信息,输出cpu ...
- /etc/ld.so.conf.d/目录下文件的作用
在了解/etc/ld.so.conf.d/目录下文件的作用之前,先介绍下程序运行是加载动态库的几种方法: 第一种,通过ldconfig命令 ldconfig命令的用途, 主要是在默认搜寻目录( ...