• 提出问题

现在需要向mysql数据库中添加100个用户,请问如何实现?

方法一:for循环100次

方法二:使用批量添加

  $sqls="insert xxx";

  $sqls.="insert xxx";

  ......

  $mysqli->multi_query($sqls);

显然,上述方法效率低。

提高效率的方法一般有:

1、减少数据库连接次数;2、减少数据库编译时间。

所以提出方法三:预编译

  • 预编译

注意:预编译和编译都是在数据库完成。

优点:1、效率高,执行速度块;2、安全性高,可以防止sql注入。

  • 案例1

使用预编译的方式向数据库添加三个用户:

 <?php
//需求:使用预编译方式向数据库添加三个用户
//连接数据库
$mysqli=new MySQLi("localhost","root","root","test");
//修改字符集
$mysqli->query("set names utf8");
//创建预编译对象
$sql="insert into user1 (name,password,age,birthday) values (?,?,?,?)";
$mysqli_stmt=$mysqli->prepare($sql); //绑定参数1
$name="zx";
$password="123456";
$age=28;
$birthday="1989-08-08";
//给?赋值,类型和顺序要对应
$mysqli_stmt->bind_param("ssis",$name,$password,$age,$birthday);
//执行
$res1=$mysqli_stmt->execute();
//判断结果
if(!$res1){
die("操作1失败".$mysqli_stmt->error);
echo "<br/>";
}else{
echo "操作1成功<br/>";
} //绑定参数2
$name="zx2";
$password="123456";
$age=28;
$birthday="1989-08-09";
//给?赋值,类型和顺序要对应
$mysqli_stmt->bind_param("ssis",$name,$password,$age,$birthday);
//执行
$res2=$mysqli_stmt->execute();
//判断结果
if(!$res2){
die("操作2失败".$mysqli_stmt->error);
echo "<br/>";
}else{
echo "操作2成功<br/>";
} //绑定参数3
$name="zx3";
$password="123456";
$age=28;
$birthday="1989-08-03";
//给?赋值,类型和顺序要对应
$mysqli_stmt->bind_param("ssis",$name,$password,$age,$birthday);
//执行
$res3=$mysqli_stmt->execute();
//判断结果
if(!$res3){
die("操作3失败".$mysqli_stmt->error);
echo "<br/>";
}else{
echo "操作3成功<br/>";
} //关闭连接
$mysqli->close();
?>

注意:1、程序执行过程中,某个sql语句执行不成功,并不会中断程序执行,会继续向下执行;

2、第二次之后,不用绑定参数也可以,即34、51行可以省略。

结果如下:

  • 案例2

查询数据库中id>?的记录,并在网页显示:

 <?php
//连接数据库
$mysqli=new MySQLi("localhost","root","root","test");
if(mysqli_connect_error()){
die("连接失败".mysqli_connect_error());
}
//修改字符集
$mysqli->query("set names utf8");
//创建预编译对象,查询id>?的记录
$sql="select id,name,age,birthday from user1 where id>?";
$mysqli_stmt=$mysqli->prepare($sql); //绑定参数1
$id=5;
$mysqli_stmt->bind_param("i",$id);
//绑定结果集
$mysqli_stmt->bind_result($id,$name,$age,$birthday);
//执行
$mysqli_stmt->execute();
//取出绑定的值
while($row=$mysqli_stmt->fetch()){
echo "$id--$name--$age--$birthday<br/>";
} echo "***************************************<br/>"; //绑定参数2
$id=8;
//执行
$mysqli_stmt->execute();
//取出绑定的值
while($row=$mysqli_stmt->fetch()){
echo "$id--$name--$age--$birthday<br/>";
} //释放结果
$mysqli_stmt->free_result();
//关闭预编译语句
$mysqli_stmt->close();
//关闭连接
$mysqli->close();
?>

结果如下:

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

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

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

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

    //预编译演示 //1,创建mysqli对象 $mysqli=new mysqli("localhost","root",""," ...

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

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

  4. mysqli扩展库的预处理

    预处理的特点:1.效率高,执行速度快 2.安全性高,可以防止sql注入 $mysqli  中的函数 $stmt=$mysqli->prepare($sql);             预备一条s ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. C#- 操作Ini文件

    以前习惯了使用.NET中的WEB.CONFIG或者APP.CONFIG,最近在做项目的时候遇到了些问题,发现没办法使用这些CONFIG文件.一开始我的做法是建一个文本文件,自己定规律,自己写方法去写新 ...

  2. 为什么Form.Timer的event handler在Form被Dispose之后还是被调到了?

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:为什么Form.Timer的event handler在Form被Dispose之后还是被调到了?.

  3. 【Unity Shaders】使用CgInclude让你的Shader模块化——创建CgInclude文件存储光照模型

    本系列主要參考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同一时候会加上一点个人理解或拓展. 这里是本书全部的插图. 这里是本书所需的代码 ...

  4. Linux内存管理学习笔记--物理内存分配

    http://blog.chinaunix.net/uid-20321537-id-3466022.html

  5. 进程控制之wait3和wait4函数

    大多数UNIX系统实现提供了另外两个函数wait3和wait4.它们提供的功能比POSIX.1函数wait.waitpid和waitid所提供的功能要多一个,这与附加参数rusage有关.该参数要求内 ...

  6. yum在线升级

    RPM优点 由於 RPM 是透过预先编译并打包成为 RPM 文件格式后,再加以安装的一种方式,并且还能够进行数据库的记载. 所以 RPM 有以下的优点: RPM 内含已经编译过的程序与配置档等数据,可 ...

  7. Mac安装Mysql无法登录

    Mac安装的Mysql5.7.10 执行mysql -u root -p 就要求输入密码,但是新安装是没密码的.然后就会报错. ERROR 1045 (28000): Access denied fo ...

  8. Scala函数字面量简化写法

    Scala提供了多种方法来简化函数字面量中多余的部分,比如前面例子中filter方法中使用的函数字面量,完整的写法如下: (x :Int ) => x +1 首先可以省略到参数的类型,Scala ...

  9. Java read()和readLine()的区别

    1.read() 功能:读取单个字符的个数,如果已经读完的话会返回-1 (其范围从 0 到 65535 ) 例子如下: byte[] buf = new byte[1024]; int len; wh ...

  10. 隐藏/显示&nbsp;我的电脑盘符驱动…

    组策略里更改即可:点击"开始"→"运行",输入"gpedit.msc",打开组策略.在窗口左侧的"本地计算机策略"中依次 ...