1, PHP程序与mysql之间处理sql语句流程如下,减少执行时间方式有三种:

① 减少php发送sql次数;

② 减少php与mysql之间网络传输时间;

③ 减少mysql的编译时间;

2, 预编译可以减少数据库执行时间,同时可以防止sql注入攻击。预编译示例如下:

① 向user1中插入3条记录。

  1. <?php
  2. //预编译演示
  3. //需求:请使用预处理的方式,向数据库添加三个用户
  4.  
  5. //1,创建mysqli对象
  6. $mysqli = new MySQLi("10.252.158.217","root","521lhy","test");
  7. if($mysqli->connect_error){
  8. die("连接错误".$mysqli->connect_error);
  9. }
  10. //2,创建预编译对象
  11. $sql = "insert into user1 (name,password,email,age) VALUES (?,?,?,?)";
  12. $mysqli_stmt = $mysqli->prepare($sql);
  13.  
  14. //绑定参数
  15. $name ="小倩";
  16. $password = "xiaoqian";
  17. $email = "xiaoqian@126.com";
  18. $age = 20;
  19. //参数绑定->给》赋值,这里类型和顺序都要对应
  20. $mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);
  21. //int对应i,double对应d,string对应s,boolean对应b
  22. //执行
  23. $b = $mysqli_stmt->execute();
  24. if(!$b){
  25. echo $name."添加出错";
  26. }
  27.  
  28. //继续添加
  29. $name = "老妖";
  30. $password = "laoyao";
  31. $email = "laoyao@126.com";
  32. $age = 120;
  33. $mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);
  34. //执行
  35. $b = $mysqli_stmt->execute();
  36. if(!$b){
  37. echo $name."添加出错";
  38. }
  39.  
  40. //继续添加
  41. $name = "宁采臣";
  42. $password = "ningcaichen";
  43. $email = "ningcaichen@126.com";
  44. $age = 24;
  45. $mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);
  46. //执行
  47. $b = $mysqli_stmt->execute();
  48. if(!$b){
  49. echo $name."添加出错";
  50. }
  51.  
  52. //释放
  53. $mysqli->close();

② 查询所有id大于5的用户信息以及id大于10的用户信息。

  1. <?php
  2. //预编译演示
  3. //需求:请使用预处理的方式,从数据库查询
  4. //使用预处理的方法,查询所有id>5的用户的id,name,email
  5. $mysqli = new MySQLi("10.252.158.217","root","521lhy","test");
  6. if($mysqli->connect_error){
  7. die("连接错误".$mysqli->connect_error);
  8. }
  9.  
  10. //创建一个预定义的对象?占位
  11. $sql = "select id,name,email from user1 where id > ?";
  12. $mysqli_stmt = $mysqli->prepare($sql);
  13.  
  14. $id = 5;
  15.  
  16. //绑定参数
  17. $mysqli_stmt->bind_param("i",$id);
  18.  
  19. //执行
  20. $mysqli_stmt->execute();
  21.  
  22. //绑定结果集
  23. $mysqli_stmt->bind_result($id,$name,$email);
  24.  
  25. //取出绑定的值
  26. while($mysqli_stmt->fetch()){
  27. echo "<br/>--$id--$name--$email";
  28. }
  29.  
  30. echo "<br/>**********************************";
  31. $id = 14;
  32.  
  33. //绑定参数
  34. $mysqli_stmt->bind_param("i",$id);
  35.  
  36. //执行
  37. $mysqli_stmt->execute();
  38.  
  39. //取出绑定的值
  40. while($mysqli_stmt->fetch()){
  41. echo "<br/>--$id--$name--$email";
  42. }
  43.  
  44. //关闭资源
  45. //释放结果
  46. $mysqli_stmt->free_result();
  47. //关闭预编译
  48. $mysqli_stmt->close();
  49.  
  50. //关闭连接
  51. $mysqli->close();

3, 防止sql注入攻击方式,$sql = “select * from user where username = ‘aaa’ and password =’bbb’”;用此种方式查询时候,如果输入密码是xx’ or 1=’1,即$sql = “select * from user where username = ‘aaa’ and password =’ xx’ or 1=’1’”;这个也会成功的,这就是sql注入。

① 使用预编译。

② 改变验证数据库用户逻辑

  1. $sql = select password from user where username = aaa’”;
  2.  
  3. //看看有没有查询到记录,如果有说明用户存在
  4.  
  5. If(从数据库查询的密码==用户输入的密码){
  6.  
  7. //合法,用户合法
  8.  
  9. header(“admin.php”);
  10.  
  11. }else{
  12.  
  13. header(“err.php”);
  14.  
  15. }

mysqli扩展库---------预处理技术的更多相关文章

  1. php mysqli扩展库之预处理操作

    分享下php使用mysqli扩展库进行预处理操作的二个例子,有意研究mysqli用法的朋友,可以参考学习下,一定会有所帮助的. 例1.使用mysqli扩展库的预处理技术 mysqli stmt 向数据 ...

  2. PHP使用mysqli扩展库实现增删改查(面向对象版)

    mysqli扩展库是mysql扩展库的改进版本,在mysql扩展库的基础上提高了稳定性和效率,mysqli扩展库有两套东西,一套就是面向过程的mysqli另一套是面向对象的mysqli.操作方式大体和 ...

  3. mysqli扩展库操作mysql数据库

    配置环境 配置php.ini文件让php支持mysqli扩展库 extension=php_mysqli.dll 建库建表 详见博客 “mysql扩展库操作mysql数据库” 查询数据库 <?p ...

  4. 【小结】有关mysql扩展库和mysqli扩展库的crud操作封装

    现阶段php如果要操作mysql数据库 php给我们提供了3套库 1.mysql扩展库   面向过程操作 2.mysqli扩展库  面向对象操作和面向过程操作并存  安全性和效率高于mysql扩展库 ...

  5. 使用php的mysqli扩展库操作mysql数据库

    简单介绍mysqli: 1.mysqli(mysql improve mysql扩展库的增强版) mysql扩展库和mysqli扩展库的区别 1.mysqli的稳定性  安全性 和 执行效率有所提高 ...

  6. mysqli扩展库应用---程序范例

    通过mysqli扩展库对用户表user1进行增删改查操作,用户表user1结构如下: 1,建立数据库操作类库mysqliTool.class.php,代码如下: <?php class mysq ...

  7. php数据库编程---mysqli扩展库

    1,mysqli扩展库允许我们访问MySQL数据库,并对MySql数据库进行curd操作.Mysqli扩展库比mysql扩展库加强了. 2,mysqli扩展库和mysql扩展库的比较 (1) mysq ...

  8. PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)

    1.和mysql扩展库的区别: (1   安全性.稳定性更高 (2  提供了面向对象和面向过程两种风格 2.php.ini  中的  extension=php_mysqli.dll 解除封印 3.面 ...

  9. mysqli扩展库的 预处理技术 mysqli stmt

    问题的提出? 现在需要向mysql数据库添加100个用户,请问如何实现? 思路: 使用for循环100次,向数据库中添加100个用户. 使用批量添加 $sql1=”insert xxx”; $ssql ...

随机推荐

  1. linux shell 脚本攻略学习 -- head命令详解, tail命令详解

    当要查看上千行的大文件时,我们可不会用cat命令把整个文件内容给打印出来,相反,我们可能只需要看文件的一小部分地内容(例如文件的前十行和后十行),我们也有可能需要打印出来前n行或后n行,也有可能打印除 ...

  2. 编码总结,以及对BOM的理解

    一.前言 在跨平台.跨操作系统或者跨区域之间,经常会涉及到编码的问题,因为前段时间在项目中,遇到了因为编码而产生乱码的问题,以前对编码也是一知半解,所以决定对编码有一个更为深入的了解,因此才有了这篇自 ...

  3. Xen的源码安装及dom0,domU的设置

    Xen作为一种应用广泛的虚拟机方案,无论是在工业还是教育领域都发挥着巨大的作用.Xen不仅有其引以为豪的Paravirtualization实现,还有基于硬件支持的HVM实现.对于Xen,Ubuntu ...

  4. js失去焦点触发

    onblur="displayRest($(this))"

  5. Nlog- Application Logging in C#

    当你在谷歌搜索 Application  Loggin in C#,排在最前面的是这个 .NET Logging Tools and Libraries ,点击进去你会发现里面收录了不错的日记工具及文 ...

  6. 汉诺塔(hanoi)

    汉诺塔代码: def hanoi(n,x,y,z): if n == 1: print(x,'-->',z) else: hanoi(n-1,x,z,y) print(x,'-->',z) ...

  7. Visual assint x(转)

    最新破解版:Visual Assist X 10.8.2001 破解版 支持VC2013及以下版本 安装步骤: 1. 双击运行VA_A_Setup2001并安装 2. 双击运行Visual Assis ...

  8. composer 更新

    composer self-update --preview 清除缓存 composer clearcache

  9. eclipse插件svn图标详细含义

    链接:http://pan.baidu.com/s/1qYSFfTq 密码:ez8p

  10. Java中BufferedReader和scanner的对比

    Scanner 和BufferedReader同样能实现将键盘输入的数据送入程序, import java.io.*;import java.util.Scanner;public class C { ...