码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2016-06-13 15:34:53      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:

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‘),‘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 "<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=‘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 <?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){} 取出每一个数据

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

标签:

原文地址:http://www.cnblogs.com/carlo-jie/p/5580496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!