mysqli 扩展库的预处理技术(mysqli_stmt)
- 提出问题
现在需要向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)的更多相关文章
- mysqli扩展库的 预处理技术 mysqli stmt
问题的提出? 现在需要向mysql数据库添加100个用户,请问如何实现? 思路: 使用for循环100次,向数据库中添加100个用户. 使用批量添加 $sql1=”insert xxx”; $ssql ...
- mysqli扩展库的预处理技术 mysqli stmt
//预编译演示 //1,创建mysqli对象 $mysqli=new mysqli("localhost","root",""," ...
- php mysqli扩展库之预处理操作
分享下php使用mysqli扩展库进行预处理操作的二个例子,有意研究mysqli用法的朋友,可以参考学习下,一定会有所帮助的. 例1.使用mysqli扩展库的预处理技术 mysqli stmt 向数据 ...
- mysqli扩展库的预处理
预处理的特点:1.效率高,执行速度快 2.安全性高,可以防止sql注入 $mysqli 中的函数 $stmt=$mysqli->prepare($sql); 预备一条s ...
- PHP中的MySQLi扩展学习(五)MySQLI_STMT对象操作
就像 PDO 中的 PDO_Statment 对象一样,MySQLI_STMT 对象也是一个预处理语句所形成的对象,专门用来操作 MySQLi 所生成的预处理语句的.其实操作方式之类也都比较相似,不外 ...
- PHP使用mysqli扩展库实现增删改查(面向对象版)
mysqli扩展库是mysql扩展库的改进版本,在mysql扩展库的基础上提高了稳定性和效率,mysqli扩展库有两套东西,一套就是面向过程的mysqli另一套是面向对象的mysqli.操作方式大体和 ...
- mysqli扩展库操作mysql数据库
配置环境 配置php.ini文件让php支持mysqli扩展库 extension=php_mysqli.dll 建库建表 详见博客 “mysql扩展库操作mysql数据库” 查询数据库 <?p ...
- 【小结】有关mysql扩展库和mysqli扩展库的crud操作封装
现阶段php如果要操作mysql数据库 php给我们提供了3套库 1.mysql扩展库 面向过程操作 2.mysqli扩展库 面向对象操作和面向过程操作并存 安全性和效率高于mysql扩展库 ...
- 使用php的mysqli扩展库操作mysql数据库
简单介绍mysqli: 1.mysqli(mysql improve mysql扩展库的增强版) mysql扩展库和mysqli扩展库的区别 1.mysqli的稳定性 安全性 和 执行效率有所提高 ...
随机推荐
- 订阅基础:RSS、ATOM、FEED、聚合、供稿、合烧与订阅
很多网友对这类名词概念非常陌生,如果没用过FEED订阅,肯定还会对诸多网站显示的FEED聚合.订阅.ATOM等等非常郁闷,虽然这几个名字间的很多并非并列关系,天缘只是有意把它们放到一起,方便对比参考, ...
- ThinkPHP函数详解:M方法
M方法用于实例化一个基础模型类,和D方法的区别在于:1.不需要自定义模型类,减少IO加载,性能较好:2.实例化后只能调用基础模型类(默认是Model类)中的方法:3.可以在实例化的时候指定表前缀.数据 ...
- CardsTube/YouTubePlaylist
CardsTube https://github.com/DesarrolloAntonio/CardsTube YouTubePlaylist https://github.com/akoscz/Y ...
- 【OpenCV-Python】Python Extension Packages for Windows
下载相关Python的扩展包,请点击这里: This page provides 32- and 64-bit Windows binaries of many scientific open-sou ...
- Java 向Hbase表插入数据报(org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apac)
org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apac 代码: //1.create HTa ...
- SECURITY_ATTRIBUTES 设置低权限
Windows 从 Vista 開始又一次改动了其系统的权限管理机制,于是如今就会碰到一些 xp 能过而 win7 不能过的代码.比方 Service 程序和一般应用程序用共享内存的方式来通讯,Cre ...
- 通过NSURLProtocol拦截HTTP转HTTPS来整合SPDY的记录
众所周知,iOS 9.0之后苹果引入ATS限制,苹果也推荐尽量不要使用HTTP通讯了,毕竟是很不安全的.而国内各个有(wu)节操的运营商也会经常篡改请求HTTP请求.所以如果可能,在不影响性能的情况下 ...
- Socket异步通信学习一
最近在做一个频谱管理项目,负责通信模块,自己也是小白,重头学起,直至今天通信基本框架已经完成,把自己在学习中的心得与大家分享一下,做一个socket系列的博文,顺便加固一下自己对socket通信的认识 ...
- Java项目依赖的配置过程
我们经常需要把大项目分解成多个小项目,然后使用依赖方式,将其他必须的依赖项目引用到项目中.最常用的方式是希望被依赖的项目能够自动被打包成jar文件,自动部署到依赖的项目中.同时被依赖项目修改后,能够同 ...
- shell记录
查看linux服务器有哪些人曾经ssh登陆过,以及他们的登录信息 who查看当前正在ssh链接中的 last查看最近被链接过的 who last netstat -nltp -an ...