1、和mysql 扩展 库的区别: (1 安全性、稳定性更高 (2 提供了 面向 对象 和 面向 过程两种风格 2、php.ini 中的 extension=php_mysqli.dll 解除封印 3、 面向 对象 :查询列表 1 ? php 2 3 // mysqli 操作 数据( 面向 对象 风格) 4 5 # 1、创建mysql 对
1、和mysql扩展库的区别:
(1 安全性、稳定性更高
(2 提供了面向对象和面向过程两种风格
2、php.ini 中的 extension=php_mysqli.dll 解除封印
3、面向对象:查询列表
1 php 2 3 //mysqli 操作数据(面向对象风格) 4 5 #1、创建mysql对象 6 7 $mysqli=new mysqli(127.0.0.1,root,daomul,test); 8 if(!$mysqli) 9 {10 die(连接失败!.$mysqli->connect_error);11 }12 13 #2、操作数据库14 15 $sql=select * from user1;16 $res=$mysqli->query($sql);17 #3、处理结果18 19 while($row=$res->fetch_row())20 {21 foreach($row as $key=> $val)22 {23 echo -- $val;24 }25 echo
;26 }27 #4、关闭资源28 $res->free();//释放内存29 $mysqli->close();//关闭连接30 31 ?>
4、面向对象:封装类后实现
4.1 sqliconnect.class.php
1 php 2 3 class sqliconnect 4 { 5 private $mysqli; 6 private static $host=127.0.0.1; 7 private static $root=root; 8 private static $password=daomul; 9 private static $db=test;10 11 function __construct()12 {13 $this->mysqli=new mysqli(self::$host,self::$root,self::$password,self::$db);14 if(!$this->mysqli)15 {16 die(数据库连接失败!.$this->mysqli->connect_error);17 }18 19 $this->mysqli->query(set names utf8);20 }21 22 //查询操作23 public function excute_dql($sql)24 {25 $res=$this->mysqli->query($sql) or die(数据查询失败.$this->mysqli->error);26 return $res;27 28 }29 30 //增删改操作31 public function excute_dml($sql)32 {33 $res=$this->mysqli->query($sql) or die(数据操作失败.$this->mysqli->error);34 if(!$res)35 {36 echo 数据操作失败;37 }38 else39 {40 if($this->mysqli->affected_rows>0)41 {42 echo 操作成功!;43 }44 else45 {46 echo 0行数据受影响!;47 }48 }49 }50 51 }52 ?>
4.2 调用页面startsqli.php
1 php 2 3 //mysqli 操作数据(面向对象风格) 4 5 6 require_once sqliconnect.class.php; 7 8 $sqliconnect=new sqliconnect(); 9 10 //$sql=insert into user1(name,password,email,age) values('帝都',md5('gg'),'sd@sohu.com',23);11 //$sql=delete from user1 where id=11;12 //$res=$sqliconnect->excute_dml($sql);13 14 $sql=select name from user1;;15 $res=$sqliconnect->excute_dql($sql);16 while($row=$)17 18 $res->free();19 ?>
5、同时执行多条数据库语句 multiquery.php
1 php 2 3 //mysqli 操作数据(面向对象风格) 4 5 #1、创建mysql对象 6 7 $mysqli=new mysqli(127.0.0.1,root,daomul,test); 8 if(!$mysqli) 9 {10 die(连接失败!.$mysqli->connect_error);11 }12 13 #2、操作数据库14 15 $sqls=select * from user1;;16 $sqls.=select * from user1;17 18 #3、处理结果19 20 if($res=$mysqli->multi_query($sqls))21 {22 echo 211;23 do 24 {25 //从mysqli连续取出第一个结果集26 $result=$mysqli->store_result();27 28 //显示mysqli result对象29 while($row=$result->fetch_row())30 {31 foreach($row as $key=> $val)32 {33 echo -- $val;34 }35 echo
;36 }37 38 $result->free();//及时释放当前结果集,并进入下一结果集39 40 //判断是否有下一个结果集41 if(!$mysqli->more_results())42 {43 break;44 }45 echo
************新的结果集**************;46 47 }while($mysqli->next_result());48 }49 50 #4、关闭资源51 $mysqli->close();//关闭连接 52 53 54 ?>
6、事务控制
1 php 2 3 //mysqli 操作数据(面向对象风格) 4 5 6 // 数据库 :create table account(id int primary key,balance float); 7 8 $mysqli=new mysqli(127.0.0.1,root,daomul,test); 9 if(!$mysqli)10 {11 die(数据库连接失败!.$mysqli->connect_error);12 }13 //将提交设为false14 $mysqli->autocommit(false);15 16 $sql1=update account set balance=balance+1 where id=1;;//没错的语句17 $sql2=update accounterror2 set balance=balance-1 where id=2;//有错的语句18 19 $res1=$mysqli->query($sql1);20 $res2=$mysqli->query($sql2);21 22 if(!$res1||!$res2)23 {24 //回滚:其中一个不成功即回滚不提交25 echo 有错,回滚,请重新提交!;26 $mysqli->rollback();//die(操作失败!.$mysqli->error);27 }28 else29 {30 //所有均成功则提交31 echo 所有提交成功!;32 $mysqli->commit();33 }34 35 $mysqli->close();36 /* 37 1、 start transaction; 开启事务38 2、svaepoint a; 做保存点39 3、执行操作1; 40 4、 svaepoint b;41 5、执行操作2;42 ...43 6、rollback to a/b; 回滚或者是提交44 7、commit 45 46 事务控制特点acid 原子性/一致性/隔离性/持久性47 */48 ?>
7、预处理技术
主要在连接和编译过程精简,还可以sql防止注入
7.1 预编译插入多个数据
1 php 2 3 //mysqli 预编译演示 4 5 #1、创建mysqli对象 6 $mysqli=new mysqli(127.0.0.1,root,daomul,test); 7 if(!$mysqli) 8 { 9 die(数据库连接失败!.$mysqli->connect_error);10 }11 12 #2、创建预编译对象13 $sql=insert into user1(name,password,email,age) values(?,?,?,?);;//暂时不赋值,用问号代替14 $stmt=$mysqli->prepare($sql) or die($mysqli->error);15 16 /********************************可重复执行时需要的代码start*********************************/17 #3、绑定参数18 $name='小明5';19 $password='34f';20 $email='ssd@qq.com';21 $age='1';22 23 #4、参数赋值(第一个参数指代参数的类型缩写,string-s,int-i,double-d,bool-b24 $stmt->bind_param(sssi,$name,$password,$email,$age);25 26 #5、执行代码(返回布尔类型)27 $flag=$stmt->execute();28 29 /********************************可重复执行时需要的代码 end************************************/30 31 #6、结果以及释放32 33 if(!$flag)34 {35 die(操作失败.$stmt->error);36 }37 else38 {39 echo 操作成功!;40 }41 42 $mysqli->close();43 44 45 ?>
7.2 预编译查询多个数据
1 php 2 3 //mysqli 预编译演示 4 5 #1、创建mysqli对象 6 $mysqli=new mysqli(127.0.0.1,root,daomul,test); 7 if(!$mysqli) 8 { 9 die(数据库连接失败!.$mysqli->connect_error);10 }11 12 /********************************可重复执行时需要的代码 start*******************************/13 14 #2、创建预编译对象15 $sql=select id,name,email from user1 where id>?;;//id,name,email和后面的结果集bind_result()对应16 $stmt=$mysqli->prepare($sql) or die($mysqli->error);17 18 #3、绑定参数19 $id=5;20 21 #4、参数赋值(第一个参数指代参数的类型缩写,string-s,int-i,double-d,bool-b22 $stmt->bind_param(i,$id);//绑定参数23 $stmt->bind_result($id,$name,$email);//绑定结果集24 25 #5、执行代码(返回布尔类型)26 $stmt->execute();27 28 #6、取出结果集显示29 while($stmt->fetch())30 {31 echo
$id--$name--$email;32 }33 34 /********************************可重复执行时需要的代码 end*******************************/35 36 #7、结果以及释放37 38 //释放结果39 $stmt->free_result();40 //关闭预编译语句41 $stmt->close();42 //关闭数据库连接43 $mysqli->close();44 45 46 ?>
8、其他函数
(1 获取行数和列数 num_rows field_count
(2 获取结果集的一列 :表头 例如
$result=$mysqli->query();
$result->fetch_field();
(3 取出数据
$row=$result->fetch_row(); //获得每一行数据
再通过 foreach($row as $val){} 取出每一个数据
