PHP mysqli 擴展庫(面向對象/資料庫操作封裝/事務控制/預編譯)

来源:http://www.cnblogs.com/carlo-jie/archive/2016/06/13/5580496.html
-Advertisement-
Play Games

1、和mysql擴展庫的區別: (1 安全性、穩定性更高 (2 提供了面向對象和麵向過程兩種風格 2、php.ini 中的 extension=php_mysqli.dll 解除封印 3、面向對象:查詢列表 1 <?php 2 3 //mysqli 操作數據(面向對象風格) 4 5 #1、創建Mys ...


 

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){} 取出每一個數據


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.安裝.Net Core https://www.microsoft.com/net/core#windows 2.創建一個.Net Core項目,win+R調出控制台,輸入下麵命令 mkdir aspnetcoreapp cd aspnetcoreapp dotnet new 輸入完成後,會在對 ...
  • 看了下Java Tutorials中的fork/join章節,整理下。 什麼是fork/join框架 fork/join框架是ExecutorService介面的一個實現,可以幫助開發人員充分利用多核處理器的優勢,編寫出並行執行的程式,提高應用程式的性能;設計的目的是為了處理那些可以被遞歸拆分的任務 ...
  • Xdebug能替代PHP的var_dump()函數來顯示變數值。xdebug的版本包含對不同數據類型作數組元素/對象屬性、最大深度和字元串長度以不同顏色標識。這裡也有一些功能能很好地處理變數顯示。 相關設置: xdebug.cli_color 類型: integer, 預設值: 0, 始於 2.2版 ...
  • 實戰代碼 安裝完成後,我們來看下代碼: 系統環境:Linux Python環境:Python2.7 請註意python版本 bt2url.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #! /usr/local/bin/python #  ...
  • Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary tree is defined as a binary tree in which the dept ...
  • OC中經常用到的一種初始化控制器的方法.比如A push B.並且將A的一個值:value 傳遞給B 使用.簡單的辦法就是 在B重構init方法.比如在.h 中定義: ()initValue:(NSString )value; 然後在.m中實現 ()initValue:(NSString )valu ...
  • 在使用 url 的 queryString 傳遞參數時,因為參數的值,被DES加密了,而加密得到的是 Base64的編碼字元串,類似於: za4T8MHB/6mhmYgXB7IntyyOUL7Cl++0jv5rFxAIFVji8GDrcf+k8g== 顯然 這裡面含有了 特殊字元: / + = 等等 ...
  • 前兩章:概述&設計環境 第3章 基本程式設計結構 基本概念在Java中的實現方式。包括以下內容: 概覽。 註釋。 數據類型。 變數。 運算符。 字元串。 輸入輸出。 控制流程。 大數值。 數組。 3.1 概覽 大小寫敏感。 訪問修飾符:程式其他部分對這段代碼的訪問級別。 類是構建所有java應用程式 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...