预处理(防止sql注入的一种方式)
<!--- 预处理(预编译) ---> <?php
/*
防止 sql 注入的两种方式:
1. 人为提高代码的逻辑性,使其变得更严谨,滴水不漏。 比如说 增加判断条件,增加输入过滤等,但是智者千虑必有一失。(不推荐)
2. sql 语句的预处理
*/ // 预处理: 就是在程序正式编译之前,事先处理,因为有些功能实现是一样的,只是发生了一些简单的值替换 /*
********** 预处理的原理: ********* insert into register_info values(?,?,?,?); 01. 创建 sql语句模板,并发送到数据库。预留的值使用参数 ? 标记
02. 数据库对模板解析,编译,对sql 语句模板执行查询优化,并存储结果不输出
03. 最多将绑定的参数传给之前 ? 标记的地方,模板执行语句。如果传的参数不一样,模板就可以多次使用。但是对模板的解析只需要做一次 ********** 预处理的优点 *********** 01. 预处理语句大大减少了分析时间,只做了一次增删改查(至于值被多次赋予,已经不需要数据库来操作)
02. 绑定参数减少了服务器带宽,你只需要发送查询或者增加的参数,而不是整个 sql 语句
03. 预处理语句能很好的防止 sql注入,因为参数的发送不会影响一开始对模板的解析,编译,模版又是自己定义的,根本不会有漏洞 */ // 面向对象 // 1. 连接数据库服务器,选择数据库 register
$mysqli = new mysqli('localhost','root','','register'); if ($mysqli){
echo '<h2><i>连接数据库成功</i></h2>'; // 2. 设置字符集
$mysqli->set_charset('utf8'); // 3. 预处理的核心代码(这部分代码数据库只执行一次)
// a. 写sql语句模板 (register_info是已有的表)
$sql = "insert into register_info(id,username,password,email,tel)VALUES (?,?,?,?,?)"; // b. prepare() 方法,预处理阶段
$stmt = $mysqli->prepare($sql); /*------------- 以下代码都是重复执行的,都是由 $stmt 对象操作 --------------*/
// a. 绑定参数 bind_param()
// 给预留的 ? 赋值,要求类型和顺序要和 ? 所表示的一致
/*
格式占位符,格式列表:
i ---> int 整型
s ---> string 字符串
d ---> double 双精度浮点型
b ---> blob(binary large object) 二进制大对象
*/ $id = 2;
$username = '王二';
$password = '1237890';
$email = 'wang@qq.com';
$tel = '12345678987'; $stmt->bind_param('issss',$id,$username,$password,$email,$tel); // b. 开始插入
if ($stmt->execute()){
echo '<h2><i>插入成功</i></h2>';
}else{
echo '<h2><i>插入失败</i></h2>';
} // 4. 关闭预处理
$stmt->close(); // 5. 关闭数据库
$mysqli->close(); }else{
die('连接数据库失败!');
}
预处理(防止sql注入的一种方式)的更多相关文章
- .net防止SQL注入的一种方式
首先也要明白一点,什么是SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将 ...
- Hibernate使用中防止SQL注入的几种方案
Hibernate使用中防止SQL注入的几种方案 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数 ...
- ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...
- Spring注入值得2种方式:属性注入和构造注入
Spring是一个依赖注入(控制反转)的框架,那么依赖注入(标控制反转)表现在那些地方了? 即:一个类中的属性(其他对象)不再需要手动new或者通过工厂方法进行创建,而是Spring容器在属性被使用的 ...
- SQL注入攻击的常见方式及测试方法
本文主要针对SQL注入的含义.以及如何进行SQL注入和如何预防SQL注入让小伙伴有个了解.适用的人群主要是测试人员,了解如何进行SQL注入,可以帮助我们测试登录.发布等模块的SQL攻击漏洞,至于如何预 ...
- Spring中属性注入的几种方式以及复杂属性的注入
在Spring框架中,属性的注入我们有多种方式,我们可以通过构造方法注入,可以通过set方法注入,也可以通过p名称空间注入,方式多种多样,对于复杂的数据类型比如对象.数组.List集合.map集合.P ...
- Spring静态注入的三种方式
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chen1403876161/article/details/53644024Spring静态注入的三 ...
- 峰Spring4学习(2)依赖注入的几种方式
一.装配一个bean 二.依赖注入的几种方式 com.cy.entity People.java: package com.cy.entity; public class People { pri ...
- .net core 注入的几种方式
一.注册的几种类型: services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();//单利模式,整个应用程序 ...
随机推荐
- 主机信息收集工具DMitry
主机信息收集工具DMitry DMitry是Kali Linux内置的一款信息收集工具.它的目标主要是Web类主机.它不仅通过主动查询.端口扫描方式,还借助第三方网站和搜索引擎获取信息. 它搜集的 ...
- Angular内置指令(一)
要注意的是不要把自己开发的指令以ng开头,以免与内置指令冲突 目录:ng-disabled,ng-readonly,ng-checked,ng-selected,ng-href,ng-src,ng- ...
- oracle中row_number和rownum的区别和联系(翻译)
http://www.tuicool.com/articles/bI3IBv 附问题:有以下一个SQL语句: SELECT * FROM ( SELECT t.*, row_number() OVER ...
- XVI Open Cup named after E.V. Pankratiev. GP of Siberia
A. Passage 枚举两个点,看看删掉之后剩下的图是否是二分图. #include <bits/stdc++.h> using namespace std ; const int MA ...
- python基本图像操作与处理
# -*- coding: utf-8 -*- from PIL import Image from pylab import * #添加中文支持 from matplotlib.font_manag ...
- mac 终端常用命令
1.复制文件内容到剪贴板:pbcopy < ~/.ssh/id_rsa.pub. 2.ssh key 的生成,参考mac ssh key 的获取. 3.sourcetree 需要输入的密码,指的 ...
- MongoDB-分片
1 分区12 分区23 路由服务器实例-mongos(客户端访问它)4 配置服务器实例-config 1 分片 cd /d D:\Test\bin1 10001 2 分片 cd /d D:\Test\ ...
- Ubuntu 14.04(amd64)安装Oracle11g XE(x64)
下载Oracle安装包 下载地址:Oracle Database Express Edition 11g Release 2 for Linux x64 安装办法 1、建立oracle用户及属主 ad ...
- jQuery extend扩展String原型
jQuery.extend(String.prototype, { isPositiveInteger:function(){ return (new RegExp(/^[1-9]\d*$/).tes ...
- laravel5.2,注册服务提供者时无法生效
laravel中注册服务提供者原本很简单,只要运行下指令php artisan make:provider TestServiceProvider,然后在config/app.php的provider ...