- 提出问题
现在需要向mysql数据库中添加100个用户,请问如何实现?
方法一:for循环100次
方法二:使用批量添加
$sqls="insert xxx";
$sqls.="insert xxx";
......
$mysqli->multi_query($sqls);
显然,上述方法效率低。
提高效率的方法一般有:
1、减少数据库连接次数;2、减少数据库编译时间。
所以提出方法三:预编译
- 预编译
注意:预编译和编译都是在数据库完成。
优点:1、效率高,执行速度块;2、安全性高,可以防止sql注入。
- 案例1
使用预编译的方式向数据库添加三个用户:
1 <?php 2 //需求:使用预编译方式向数据库添加三个用户 3 //连接数据库 4 $mysqli=new MySQLi("localhost","root","root","test"); 5 //修改字符集 6 $mysqli->query("set names utf8"); 7 //创建预编译对象 8 $sql="insert into user1 (name,password,age,birthday) values (?,?,?,?)"; 9 $mysqli_stmt=$mysqli->prepare($sql); 10 11 //绑定参数1 12 $name="zx"; 13 $password="123456"; 14 $age=28; 15 $birthday="1989-08-08"; 16 //给?赋值,类型和顺序要对应 17 $mysqli_stmt->bind_param("ssis",$name,$password,$age,$birthday); 18 //执行 19 $res1=$mysqli_stmt->execute(); 20 //判断结果 21 if(!$res1){ 22 die("操作1失败".$mysqli_stmt->error); 23 echo "<br/>"; 24 }else{ 25 echo "操作1成功<br/>"; 26 } 27 28 //绑定参数2 29 $name="zx2"; 30 $password="123456"; 31 $age=28; 32 $birthday="1989-08-09"; 33 //给?赋值,类型和顺序要对应 34 $mysqli_stmt->bind_param("ssis",$name,$password,$age,$birthday); 35 //执行 36 $res2=$mysqli_stmt->execute(); 37 //判断结果 38 if(!$res2){ 39 die("操作2失败".$mysqli_stmt->error); 40 echo "<br/>"; 41 }else{ 42 echo "操作2成功<br/>"; 43 } 44 45 //绑定参数3 46 $name="zx3"; 47 $password="123456"; 48 $age=28; 49 $birthday="1989-08-03"; 50 //给?赋值,类型和顺序要对应 51 $mysqli_stmt->bind_param("ssis",$name,$password,$age,$birthday); 52 //执行 53 $res3=$mysqli_stmt->execute(); 54 //判断结果 55 if(!$res3){ 56 die("操作3失败".$mysqli_stmt->error); 57 echo "<br/>"; 58 }else{ 59 echo "操作3成功<br/>"; 60 } 61 62 //关闭连接 63 $mysqli->close(); 64 ?>
注意:1、程序执行过程中,某个sql语句执行不成功,并不会中断程序执行,会继续向下执行;
2、第二次之后,不用绑定参数也可以,即34、51行可以省略。
结果如下:
- 案例2
查询数据库中id>?的记录,并在网页显示:
1 <?php 2 //连接数据库 3 $mysqli=new MySQLi("localhost","root","root","test"); 4 if(mysqli_connect_error()){ 5 die("连接失败".mysqli_connect_error()); 6 } 7 //修改字符集 8 $mysqli->query("set names utf8"); 9 //创建预编译对象,查询id>?的记录 10 $sql="select id,name,age,birthday from user1 where id>?"; 11 $mysqli_stmt=$mysqli->prepare($sql); 12 13 //绑定参数1 14 $id=5; 15 $mysqli_stmt->bind_param("i",$id); 16 //绑定结果集 17 $mysqli_stmt->bind_result($id,$name,$age,$birthday); 18 //执行 19 $mysqli_stmt->execute(); 20 //取出绑定的值 21 while($row=$mysqli_stmt->fetch()){ 22 echo "$id--$name--$age--$birthday<br/>"; 23 } 24 25 echo "***************************************<br/>"; 26 27 //绑定参数2 28 $id=8; 29 //执行 30 $mysqli_stmt->execute(); 31 //取出绑定的值 32 while($row=$mysqli_stmt->fetch()){ 33 echo "$id--$name--$age--$birthday<br/>"; 34 } 35 36 //释放结果 37 $mysqli_stmt->free_result(); 38 //关闭预编译语句 39 $mysqli_stmt->close(); 40 //关闭连接 41 $mysqli->close(); 42 ?>
结果如下: