程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 邊記邊學PHP-(十七)PHP使用MySQLi擴展庫操作數據庫2

邊記邊學PHP-(十七)PHP使用MySQLi擴展庫操作數據庫2

編輯:關於PHP編程

邊記邊學PHP-(十七)PHP使用MySQLi擴展庫操作數據庫2


從前天開始,我的電腦不知道怎麼了,寫程序的時候無緣無故就死機。還不是徹底死,鼠標還能動,就是點擊不好使,也打不開任務管理器。昨晚檢查一下硬盤,有六個壞道,也不知道是不是這個原因。但是我在玩的時候,只要不打開編譯器寫程序,啥事也沒有。玩游戲也不回出現那種情況。把我搞得好煩。

四、Mysqli擴展庫增強

MySQLi擴展庫在基礎操作上看著沒什麼不同,只是從面面向過程轉換成了面向對象。但是既然是mysql擴展庫的增強,那一定有強的地方。有如下代碼:

 

1、批量執行sql語句

connect_error){
     //     die($mysqli->connect_error);
     //}
     //$sqls = insert into user(name,phone,address)values('張飛',18899992222,'中國');;
     //$sqls .= insert into user(name,phone,address)values('黃飛鴻',18899991111,'中國');;
     //$sqls .= insert into user(name,phone,address)values('王剛',18899993333,'中國');;

     //$res = $mysqli->multi_query($sqls);
     //if(!$res){
     //     echo 執行失敗;
     //}else{
     //     echo ok;
     //}
     //$mysqli->close();
     //批量執行dml語句的時候可以混合使用:insert delete update語句,但是最好不要插入select語句

     //批量執行dql語句(select)
     //1.打開mysqli對象
     $mysqli=new MySQLi(localhost,root,root,test);
     //2.批量查詢
     $sqls = select * from mr_user;;
     $sqls.=select * from user;;
     //$sqls.=desc user;//顯示表的結構
    
     //3.處理結果
     //如果成功,則至少有一個結果集
     if($res=$mysqli->multi_query($sqls)){
          do{
               //從mysqli連接取出第一個結果集
               $result = $mysqli->store_result();
               //顯示mysqli result對象
               while($row=$result->fetch_row()){
                    foreach($row as $key=>$val){
                         echo $val--;
                    }
                    echo 
;
               }
               //使用完第一個結果集後應該及時釋放資源
               $result->free();
               if(!$mysqli->more_results()){
                    break;
               }
               echo 
**************新的結果集************
;

          }while($mysqli->next_result());
    
     }
     //4.關閉資源



?>
上面用到的數據庫是我自己另建的。

 

2、mysqli防注入

mysqli擴展庫防注入是通過預編譯機制來做到的。所謂注入就是一些電腦黑客或者攻擊者利用你代碼的缺陷在填寫表單的時候能夠獲取到你的數據庫裡面的數據或者惡意修改等。在mysql擴展庫中,也可以通過代碼優化來防止。看一段代碼:
prepare($sql);

     //綁定參數
     $name = array(小倩,小白,小黑);
     $phone = array(18833332222,18744446666,18899992222);
     $address = array(古代,古代,現代);
     //參數綁定---->給?賦值
     //這裡類型和順序都要對應
     for($i=0;$i<3;$i++){
     $mysqli_stmt->bind_param(sss,$name[$i],$phone[$i],$address[$i]);//這裡三個s是代表數據類型是字符串類型

     //執行語句

     $b = $mysqli_stmt->execute();
     }



     if(!$b){
          die(操作失敗.$mysqli_stmt->error);
     }else{
          echo 操作成功;
     }

     //釋放資源
     $mysqli->close();


?>


8的用戶的id,name ,address
     //1.創建一個mysqli對象
     $mysqli = new MySQLi(localhost,root,root,test);

     //2.創建預編譯對象
     $sql = select id,name,address from user where id>?;

     $mysqli_stmt = $mysqli->prepare($sql);

     $i=8;
     //綁定參數
     $mysqli_stmt->bind_param(i,$i);
     //由於這次有返回對象了,所以需要綁定結果集
     $mysqli_stmt->bind_result($id,$name,$address);
     //執行
     $mysqli_stmt->execute();

     //取出綁定的結果集
     while($mysqli_stmt->fetch()){
          echo 
--$id--$name--$address--;
     }
    

     //如果想再執行一次類似上面的只是$i改變的查詢,那麼就無須綁定結果集

     //釋放資源
     $mysqli_stmt->free_result();
     //關閉預編譯指令
     $mysqli_stmt->close();
     //關閉連接
     $mysqli->close();

?>

3、事務處理

事務用於保證數據的一致性,它由一組相關的dml語句組成,該組的dml語句要麼全部成功,要麼全部失敗。通俗一點就是事務可以解決一些誤操作,或者說操作不當。如:網上轉賬就是典型的要用事務來處理,用以保證數據的一致性。假如我要給你轉賬,我的錢打過去了,但由於系統原因你沒收到,那麼就需要用到事務回滾,撤銷我剛剛的操作,不能讓我的錢少了你的錢不增。
connect_error){
          die($mysqli->connect_error);
     }

     //將提交設為false

     $mysqli->autocommit(false);//打開或關閉本次數據庫連接的自動命令提交事務模式 ,這裡設置不要自動提交(false)
     //這裡相當於做了一個透明的保存點。會把當前情況記錄下來。

     $sql1 = update account set balance=balance+100 where id = 1;
     $sql2 = update account set balance=balance-100 where id = 2;

     $res1 = $mysqli->query($sql1);
     $res2 = $mysqli->query($sql2);

    
     if(!$res1||!$res2){
          //回滾事務
          $mysqli->rollback();//回滾到保存點
          echo fail;
     }else{
          //提交
          $mysqli->commit();  //這裡是真正的提交,一旦提交沒有機會回滾。
          echo success;
     }

?>

使用事務的細節: 在mysql控制台也可以使用事務來操作。具體步驟如下:
1.開啟一個事務
start transaction
2.做保存點,如果不做就默認從事務開始時作為保存點
savepoint 保存點名稱
3.操作……
4.可以回滾,可以提交
4.1如果沒有問題就提交
commit
4.2如果覺得有問題就回滾
rollback to 保存點
(一旦使用commit提交,保存點全部清除,無法回滾)
事務的acid特性
* 原子性:原子性是指事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。
* 一致性:事務必須使數據庫從一個一致性狀態變換到另外一個一致性狀態
* 持久性:事務的隔離性是多個用戶並發訪問數據庫時,數據庫為每一個用戶開啟事務,不能被其他事物的操作數據所干擾,多個並發事務之間要相互隔離。
* 隔離性:持久性是指一個事務一旦被提交,它對數據庫中的數據的改變就是永久的,接下來即使數據庫發生故障,也不應該對其有任何影響。

 








  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved