在前一篇 mysqli基础知识中谈到mysqli的安装及基础操作(主要是单条sql语句的查询操作),今天介绍的是mysqli中很重要的一个部分:预处理。

  在mysqli操作中常常涉及到它的三个主要类:MySQLi类,MySQL_STMT类,MySQLi_RESULT类。预处理主要是利用MySQL_STMT类完成的。

  预处理是一种重要的 防止SQL注入的手段,对提高网站安全性有重要意义。

  本文案例为 数据库名为test,数据表名为test,  字段有id ,title 两个,id自增长主键。

 

  使用mysqli预处理执行插入操作:

  1. <?php
  2.  
  3. define("HOST", "localhost");
  4. define("USER", 'root');
  5. define("PWD", '');
  6. define("DB", 'test');
  7.  
  8. $mysqli=new Mysqli(HOST,USER,PWD,DB);
  9.  
  10. if ($mysqli->connect_errno) {
  11. "Connect Error:".$mysqli->connect_error;
  12. }
  13.  
  14. $mysqli->set_charset('utf8');
  15.  
  16. $id='';
  17. $title='title4';
  18. //用?代替 变量
  19. $sql="INSERT test VALUES (?,?)";
  20. //获得$mysqli_stmt对象,一定要记住传$sql,预处理是对sql语句的预处理。
  21. $mysqli_stmt=$mysqli->prepare($sql);
  22.  
  23. //第一个参数表明变量类型,有i(int),d(double),s(string),b(blob)
  24. $mysqli_stmt->bind_param('is',$id,$title);
  25.  
  26. //执行预处理语句
  27. if($mysqli_stmt->execute()){
  28. echo $mysqli_stmt->insert_id;
  29. }else{
  30. echo $mysqli_stmt->error;
  31.  
  32. }
  33. $mysqli->close();

使用mysqli预处理防止sql注入:

  1. $id='4';
  2. $title='title4';
  3.  
  4. $sql="SELECT * FROM test WHERE id=? AND title=?";
  5. $mysqli_stmt=$mysqli->prepare($sql);
  6. $mysqli_stmt->bind_param('is',$id,$title);
  7.  
  8. if ($mysqli_stmt->execute()) {
  9. $mysqli_stmt->store_result();
  10. if($mysqli_stmt->num_rows()>0){
  11. echo "验证成功";
  12. }else{
  13. echo "验证失败";
  14. }
  15. }
  16. $mysqli_stmt->free_result();
  17. $mysqli_stmt->close();

使用mysqli预处理执行查询语句:

  1. $sql="SELECT id,title FROM test WHERE id>=?";
  2.  
  3. $mysqli_stmt=$mysqli->prepare($sql);
  4. $id=1;
  5.  
  6. $mysqli_stmt->bind_param('i',$id);
  7.  
  8. if($mysqli_stmt->execute()){
  9. $mysqli_stmt->store_result();
    //将一个变量绑定到一个prepared语句上用于结果存储
  10. $mysqli_stmt->bind_result($id,$title);
  11. while ($mysqli_stmt->fetch()) {
  12. echo $id.' :'.$title.'<br/>';
  13. }
  14.  
  15. }

更多mysqli技术请参见php官方手册,查手册是学习的最好方法~

php mysqli扩展之预处理的更多相关文章

  1. mysqli扩展库---------预处理技术

    1, PHP程序与mysql之间处理sql语句流程如下,减少执行时间方式有三种: ① 减少php发送sql次数: ② 减少php与mysql之间网络传输时间: ③ 减少mysql的编译时间: 2, 预 ...

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

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

  3. PHP中的MySQLi扩展学习(四)mysqli的事务与预处理语句

    对于 MySQLi 来说,事务和预处理语句当然是它之所以能够淘汰 MySQL(原始) 扩展的资本.我们之前也已经学习过了 PDO 中关于事务和预处理语句相关的内容.所以在这里,我们就不再多讲理论方面的 ...

  4. Mysqli扩展类

    Mysqli 扩展是需要php5.0版本以上的支持 主要有以下的3个类 MySQLi类,基本操作 MySQL_STMT类,预处理操作 MySQLi_RESULT类,结果操作 Mysqli的编写有两种方 ...

  5. PHP中的MySQLi扩展学习(五)MySQLI_STMT对象操作

    就像 PDO 中的 PDO_Statment 对象一样,MySQLI_STMT 对象也是一个预处理语句所形成的对象,专门用来操作 MySQLi 所生成的预处理语句的.其实操作方式之类也都比较相似,不外 ...

  6. PHP中的MySQLi扩展学习(二)mysqli类的一些少见的属性方法

    虽说是少见的一些属性方法,但是可能还是有不少同学在日常的开发中使用过,这里只是学习了可能相对来说我们用得比较少的一些 mysqli 的属性或方法.就当是扩展一下自己的知识体系. 切换用户 首先就是切换 ...

  7. PHP中的MySQLi扩展学习(一)MySQLi介绍

    关于 PDO 的学习我们告一段落,从这篇文章开始,我们继续学习另外一个 MySQL 扩展,也就是除了 PDO 之外的最核心的 MySQLi 扩展.可以说它的祖先,也就是 MySQL(原始) 扩展是我们 ...

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

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

  9. phpMyAdmin 缺少 mysqli 扩展。请检查 PHP 配置

    好久没有在windows下配置php了,今天,按照前一篇文章配置好,打开phpmyadmin时,出现如下问题: phpMyAdmin 缺少 mysqli 扩展.请检查 PHP 配置 网上搜索解决方案, ...

随机推荐

  1. HTTPS(SSL/TLS) 原理之深入浅出

    注:本文参考自网络上的多篇HTTPS相关文章,本人根据自己的理解,进行一些修改,综合. 1. 必要的加密解密基础知识 1)对称加密算法:就是加密和解密使用同一个密钥的加密算法.因为加密方和解密方使用的 ...

  2. 观察者模式--java jdk中提供的支持

    一.简介 观察者设计模式有如下四个角色 抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个抽象 ...

  3. .NET 分页

    .net分页 1.存储过程create procedure 存储过程名( @pageIndex int,                         //第几页 @pageSize int     ...

  4. 提高IT团队工作效率的建议

    过分强调个人主义,不科学分工,内部成员的冲突等,都将导致IT团队没有凝聚力,直接影响团队合作项目的完成.如何提高团队工作效率,相信很多IT经理人都想过这类问题.日前,国外科技网站CIO撰文就如何提高I ...

  5. (转载)APP测试点总结

    以下所有测试最后必须在真机上完整的执行1.安装.卸载测试 在真机上的以及通过91等第三方的安装与卸载 安装在手机上还是sd卡上 2.启动app测试3.升级测试 数字签名.升级覆盖安装.下载后手动覆盖安 ...

  6. 构建多模块的Maven项目

    在Eclipse下创建一个maven项目,该项目有多个模块组成. 1.创建父项目 File->New->Project->Maven->Maven Project(图一)   ...

  7. Linux syslog介绍

    一.简介 syslog是Linux系统默认的日志守护进程.默认的主配置文件和辅助配置文件分别是/etc/syslog.conf和/etc/sysconfig/syslog文件.通常,syslog 接受 ...

  8. 内存流和null字节

    #include <stdio.h> #include <string.h> int main() { ]={}; FILE* fp = fmemopen(buf,," ...

  9. volatile与synchronized关键字

    volatile关键字相信了解Java多线程的读者都很清楚它的作用.volatile关键字用于声明简单类型变量,如int.float.boolean等数据类型.如果这些简单数据类型声明为volatil ...

  10. Hadoop学习之SecondaryNameNode

    在启动Hadoop时,NameNode节点上会默认启动一个SecondaryNameNode进程,使用JSP命令可以查看到.SecondaryNameNode光从字面上理解,很容易让人认为是NameN ...