zoukankan      html  css  js  c++  java
  • 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'),'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){} 取出每一个数据

  • 相关阅读:
    富人和穷人的区别(转)
    asp.net主题的几种应用
    asp.net主题的几种应用
    富人和穷人的区别(转)
    SQL SERVER中一些常见性能问题的总结
    SQL SERVER中一些常见性能问题的总结
    Bind和Eval的区别详解
    优酷去广告代码
    使用jquery框架导致js功能失效解决办法
    absolute定位问题
  • 原文地址:https://www.cnblogs.com/carlo-jie/p/5580496.html
Copyright © 2011-2022 走看看