预处理(防止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 = ‘[email protected]‘;    $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(‘连接数据库失败!‘);}
时间: 2024-10-24 20:59:26

预处理(防止sql注入的一种方式)的相关文章

防止sql注入的三种方法

常用的避免SQL注入的三种方法 一,存储过程 在学习数据库视频的时候接触过,它是存储在数据库中的一些事先编译好的指令.在用的时候不用重新编写,直接调用就好了.所以,使用它可以大大提高程序的执行效率. 那么,如果创建一个存储程序并使用它呢?这是我们今天要解决的问题 1.创建过程 可编程性--下拉菜单--存储过程--右键--查询菜单--指定模板参数的值--新建查询--输入语句--查询菜单中的分析检查语法是否正确--执行 2.具体创建语法 在创建存储程序时,为了应对各种变换的数据,通常会涉及到带参数的

Hibernate使用中防止SQL注入的几种方案

Hibernate使用中防止SQL注入的几种方案 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. 在获取便利操作的同时,SQL的注入问题也值得我们的密切注意,下面就来谈谈几点如何避免SQL注入:    1.对参数名称进行绑定: 1 2 Query query=session.createQuery(hql); query.setString(“name”,name);        2.

spring学习一——基本搭建,属性注入的两种方式

今天用spring 3.2.5搭建了基本的环境,spring出的太快了,前段时间才3.2.5,今儿个一瞧已经上了4的版本了,稍后给出spring的jar下载地址,毕竟现在官网上找不到了啊. 废话少说了,spring 3.2.5已经将所有的依赖包都放在了dist的lib下面,并且都有doc包和源码包,很是方便.先导入所需的jar包:core,context,beans,expression 四个jar包,除此之外,还需导入commons-logging. 下一步,新建xml文件,建议名称为 app

SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式

在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. Spring依赖注入(

Spring注入值得2种方式:属性注入和构造注入

Spring是一个依赖注入(控制反转)的框架,那么依赖注入(标控制反转)表现在那些地方了? 即:一个类中的属性(其他对象)不再需要手动new或者通过工厂方法进行创建,而是Spring容器在属性被使用的时候给予注入. 注入有2种方式: 1. 属性注入:通过无参构造函数+setter方法注入 2. 构造注入:通过有参的构造函数注入. 优缺点: 1. 属性注入直白易懂,缺点是对于属性可选的时候,很多个构造函数会显得类很臃肿. 2. 构造注入是一种高内聚的体现,特别是针对有些属性需要在对象在创建时候赋值

峰Spring4学习(2)依赖注入的几种方式

一.装配一个bean 二.依赖注入的几种方式 com.cy.entity   People.java: package com.cy.entity; public class People { private int id; private String name; private int age; public People() { super(); // TODO Auto-generated constructor stub } public People(int id, String n

Spring的依赖注入的2种方式(1天时间)

今天花了一天的时间才调试出来 private      接口   实现类的那个bean; 最后面的那个名字不能随便的写,必须是配置文件中,实现类的那个bean 就是后面的那个名字写错了,花了整整一天 必须有这句注解扫描才能扫描到注解 进行注解的配置,不需要get方法和set方法,小龙儿说xml文件配置才需要set方法 package com.baobaotao1; import org.springframework.context.ApplicationContext; import org.

java 执行sql脚本的3种方式 (ant,ibatis,ScriptRunner)

package com.unmi; import java.io.*; import org.apache.tools.ant.*; import org.apache.tools.ant.taskdefs.*; import org.apache.tools.ant.types.*; /** * 调用 ant.jar 的 SQLExec 执行 SQL 脚本文件 * @author Unmi */ public class AntExecSql { /** * @param args */ pu

Spring学习笔记二(Bean注入的几种方式)

1.前言 上一篇博客从宏观上讲解了一下Spring的知识,下面这篇来着重讲解一下有关Bean注入的几种方式. 2.Bean注入的几种方式 2.1 类构造器初始化 这也是默认的方式,在上一篇博客中也有所体现.直接在applicationContext.xml配置文件中,配置Bean标签即可 <span style="font-family:SimSun;font-size:18px;"><!-- 实例工厂初始化 --> <!-- 必须先创建实例工厂对应的Be