php面向对象封装mysql_PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)...

1、和mysql扩展库的区别:

(1   安全性、稳定性更高

(2  提供了面向对象和面向过程两种风格

2、php.ini  中的  extension=php_mysqli.dll 解除封印

3、面向对象:查询列表

1 <?php2

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 <?php2

3 ClassSqliconnect4 {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 else

39 {40 if($this->mysqli->affected_rows>0)41 {42 echo "操作成功!";43 }44 else

45 {46 echo "0行数据受影响!";47 }48 }49 }50

51 }52 ?>

4.2 调用页面startsqli.php

1 <?php2

3 //mysqli 操作数据(面向对象风格)

4

5

6 require_once "Sqliconnect.class.php";7

8 $Sqliconnect=newSqliconnect();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 <?php2

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 <?php2

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 //将提交设为false

14 $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 else

29 {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、commit45

46 事务控制特点acid 原子性/一致性/隔离性/持久性47 */

48 ?>

7、预处理技术

主要在连接和编译过程精简,还可以SQL防止注入

7.1 预编译插入多个数据

1 <?php2

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-b

24 $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 else

38 {39 echo "操作成功!";40 }41

42 $mysqli->close();43

44

45 ?>

7.2 预编译查询多个数据

1 <?php2

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-b

22 $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){} 取出每一个数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值