(1)预编译的好处

假如要执行100条类似的sql语句,每一次执行,在MySQL端都会进行一次编译,效率很低。提高效率的方法就是--减少编译的次数。

先制造一个sql语句的模板,在MySQL端预先编译好,之后每次只需要传递数据即可。

除了提高效率之外,预编译还可以防止sql注入。

(2)dml语句的预编译

以向一个表中插入数据为例。表结构如下:

+----------+----------------------------+

| Field      | Type                           |

+----------+----------------------------+

| id           | int(11)                       |

| name      | varchar(20)                |

| height     | float(5,2)                   |

| gender    | enum('male','female')  |

| class_id   | int(11)                      |

+----------+----------------------------+

1 //dml语句的预编译2 // 1.连接数据库

3 $mysqli = new MySQLi('localhost','root','root','lianxi');4 if(mysqli_connect_errno()){5 echo '连接失败 '.$mysqli->connect_error;6 }7 $mysqli->query('set names utf8');8 //2.进行预编译9 // 问号是占位符

10 $sql = 'insert into student values (?,?,?,?,?)';11 //通过MySQLi类的prepare()方法对sql模板进行编译,返回一个MySQLi_STMT类对象

12 $stmt = $mysqli->prepare($sql) or die($mysqli->connect_error);13 //利用MySQLi_STMT类中的bind_param()方法绑定参数。第一个参数表示各个字段的类型,i(int)、s(string)、d(double)

14 $stmt->bind_param('isdii',$id,$name,$height,$gender,$classId);15 //3.利用MySQLi_STMT类中的execute()方法插入数据

16 $id = null;17 $name = 'Mildred';18 $height = 165.00;19 $gender = 2;20 $classId = 12;21 $stmt->execute() or die($stmt->error);22 //继续插入数据

23 $id = null;24 $name = 'Shaw';25 $height = 174.50;26 $gender = 1;27 $classId = 11;28 $stmt->execute() or die($stmt->error);29

30 //关闭连接

31 $stmt->close();32 $mysqli->close();

(3)dql语句的预编译

和dml语句不同的地方在于,除了要绑定参数,还需要绑定结果集

1 //dql语句的预编译2 // 1.连接数据库

3 $mysqli = new MySQLi('localhost','root','root','lianxi');4 if(mysqli_connect_error()){5 die('连接失败 '.$mysqli->connect_error);6 }7 $mysqli->query('set names utf8');8 //2.编译sql语句

9 $sql = 'select * from student where id>?';10 $stmt = $mysqli->prepare($sql) or die($mysqli->error);11 //3.绑定参数

12 $stmt->bind_param('i',$id);13 //4.绑定结果集

14 $stmt->bind_result($id,$name,$height,$gender,$classId);15 //5.执行

16 $id = 2;17 $stmt->execute();18 //6.利用MySQLi_STMT类中的fetch()方法,通过循环得到查询的数据

19 while($stmt->fetch()){20 echo $id.'--'.$name.'--'.$height.'--'.$gender.'--'.$classId;21 echo '
';22 }23 //7.关闭连接

24 $stmt->free_result();25 $stmt->close();26 $mysqli->close();

php预编译mysql扩展_PHP-Mysqli扩展库的预编译相关推荐

  1. php mysql 持久化_PHP: mysqli 扩展和持久化连接 - Manual

    mysqli 扩展和持久化连接 从 PHP 5.3 mysqli 扩展开始支持持久化连接. 持久化连接已经在 PDO MYSQL 和 ext/mysql 中提供支持. 持久化连接的目的在于重用客户端到 ...

  2. php mysql预处理_php mysqli扩展之预处理

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

  3. php操作mysql数据库的扩展有哪些_8.PHP操作MySQL数据库(Mysqli扩展)

    思考:如果数据库的操作都是需要我们手动去调用客户端发送指令,那么这样的操作有什么意义呢? 引入:手动通过客户端操作MySQL数据库,只是我们学习SQL的一种手段.要实现数据库的自动调用,就需要客户端能 ...

  4. freebsd php 编译 mysql sql2005_[伊达原创]FreeBSD8.0源码编译安装MYSQL5 APACHE2.2 PHP5.3.2

    /********************************************** @desc:FreeBSD8.0+APACHE-2.2.15+MYSQL-5.1.45+PHP-5.3. ...

  5. vs编译c语言停止工作运行库mt,vc++编译时运行库选择(/MT/MTd/MD/MDd)

    vc++编译时运行库选择(/MT/MTd/MD/MDd) vc++编译时运行库选择(/MT./MTd./MD./MDd) 在vs中,项目属性 ->C/C++ ->代码生成 ->运行库 ...

  6. mysqli扩展是mysql扩展的增强版_PHP学习笔记【22】--PHP数据库编程 mysql扩展库 和mysqli扩展库...

    <?php         // php数据库编程     //php链接有 mysql 和mysqli    //    $conn  = mysql_connect("localh ...

  7. php5.3 gd库,php5.3动态编译gd库 zlib扩展 mcrypt扩展 mysqli扩展

    编译gd cd /usr/local/src/php-5.3.5/ext/gd 一定要在这个目录下执行 /usr/local/php/bin/phpize 接着在当前目录下执行: ./configur ...

  8. php7不支持mysql扩展了么_php7不支持mysql扩展需要改成mysqli扩展

    最近升级php7发现不支持mysql扩展,需要改成用mysqli扩展 看代码class Db{ private $username = ''; private $password = ''; priv ...

  9. mysql报11004_使用mysqli扩展技术查看服务器连接错误报告的方法

    使用mysqli扩展技术查看服务器连接错误报告的方法 作为PHP的黄金搭档MySQL数据库,在PHP项目开发过程中有着举足轻重的作用,这不仅因为MySQL是完全免费的,而且和PHP一样都是完全跨平台的 ...

  10. phpize mysql_phpize编译mysql扩展

    你的位置: 问答吧 -> PHP进阶 -> 问题详情 phpize编译mysql扩展 我用的是php-cgi,默认没有添加mysql扩展,我只能自己编译mysql.so了,在php-sou ...

最新文章

  1. 免费获取 Kaspersky Small Office Security 90 天授权
  2. Qt插件:在Qt中进行ROS开发(一)
  3. android 解决Error:This Gradle plugin requires a newer IDE able to request IDE model level 3. For Andro
  4. CodeForces - 500A-New Year Transportation(模拟)
  5. ad证书服务器在ADgroup,ACS 5.x :根据AD组成员配置示例和Authorization命令的TACACS+认证...
  6. 好久没玩laravel了,5.6玩下(三)
  7. 一文理解设计模式之--策略模式(Strategy)
  8. 转(HP大中华区总裁孙振耀退休感言)
  9. 信号发送函数sigqueue和信号安装函数sigaction
  10. 【java学习之路】(java SE篇)(练习)集合练习:经典例题
  11. MySQL性能优化的21个最佳实践 和 mysql使用索引
  12. 动态网页技术--JSP(7)
  13. c语言图形库 ege easyx,初识ege图形库
  14. 嵌入式电子钢琴游戏开发设计
  15. python floor是什么意思_python里floor怎么用
  16. 骁龙870相当于什么处理器 骁龙870什么水平
  17. 【一览表】macOS代号\macOS版本\苹果电脑各型号对应的macOS版本列表
  18. mysql非结构化查询_Mysql(2.3) 简单查询(SELECT)、子查询
  19. 基于matlab的数值分析实例研究,基于MATLAB的数值分析答辩.ppt
  20. 数据库如何备份与恢复

热门文章

  1. rpm软件包管理的详细解读
  2. 新春测 kinect motor
  3. wget 下载百度云jdk
  4. MySQL的InnoDB表如何设计主键索引-转自淘宝MySQL经典案例
  5. 职场攻略:每天淘汰自己的不足
  6. 程序编译过程与软件启动过程
  7. mvn package 报Failed to execute goal
  8. Gstreamer之gst_omx_video_enc_set_format(二十七)
  9. selinux denied: u:r:untrusted_app:s0:c512,c768报错解决
  10. Video for linux 2 example (v4l2 demo)