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

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 "<br/>";

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               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 <?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'),'[email protected]',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 "<br/>";

36          }

37          

38        $result->free();//及时释放当前结果集,并进入下一结果集

39          

40          //判断是否有下一个结果集

41          if(!$mysqli->more_results())

42          {

43            break;

44          }

45        echo "<br/>************新的结果集**************";

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   //将提交设为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、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='[email protected]';

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 <?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-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 "<br/>$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){} 取出每一个数据

   

你可能感兴趣的:(mysql)