操作MySQL資料庫之MySQLI方式

來源:互聯網
上載者:User

這篇文章主要介紹了關於php操作MySQL資料庫之MySQLI方式,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

PHP操作MySQL的三種方式

MySQL

非永久串連,每次使用資料庫,都會開啟一個新進程,

缺點:
效能較低,PHP5.0以後被廢棄。

MySQLi

永久串連,減輕伺服器壓力,只支援MySQL

缺點:
佔用記憶體

PDO (推薦使用)

能實現MySQLi的常用功能,支援大部分資料庫。

MySQLI方式(物件導向)

基本使用:

1)串連資料庫

$mysqli = new mysqli(‘host’,‘username’,‘password’,‘database’)

2)執行SQL語句

$mysqli -> query($sql);

3)擷取結果

$result -> fetch_array([MYSQLI_ASSOC])     一個$result -> fetch_assoc()                   一個$result -> fetch_all([MYSQLI_ASSOC])       全部

方法一預設是索引數組,添加參數後變成關聯陣列

方法二,相當於方法一加參數。

4)關閉串連

$mysqli -> close();

執行個體:

<?php// MySQLi增刪改例子// MySQLi方式串連資料庫$mysqli = new mysqli('localhost','root','123456789','test');// 執行SQL語句// 使用utf-8編碼$mysqli -> query('set names utf8');// 插入//$result = $mysqli -> query("INSERT users(name,money) VALUES('甜筒',4) ");//$result = $mysqli -> query("INSERT users(name,money) VALUES('麥辣雞腿堡',16) ");// 修改//$result = $mysqli -> query("UPDATE users SET `name`= '麥旋風' WHERE `id` = 2");// 刪除//$result = $mysqli -> query("DELETE FROM users WHERE `id` = 5");//var_dump($result);/*********************查詢*****************/ $result = $mysqli -> query("SELECT * FROM users");// 擷取結果集$data = $result -> fetch_all(MYSQLI_ASSOC);var_dump($data);

事務控制

事務就是將多個邏輯工作,組合成一個執行單元的資料庫操作(共成敗)。

1)開啟事務

$mysqli -> autocommit(false)

這個方法將會讓事務馬上提交,所以需要填參數false。

2)交易回復

$mysqli -> rollback()

如果資料出現了什麼差錯,可以使用這個方法還原資料。

3)事務提交

$mysqli -> commit()

4)關閉串連

$mysqli -> close()

注意:

當我們使用query()執行SQL語句的時候,他不會管資料庫的變化,只管SQL語句是否錯誤。

所以我們不能依賴query()的傳回值,來判斷操作成功與否。

要使用影響行數,來判斷:

$mysqli -> affected_rows

執行個體

<?php// MySQLi事務控制例子header("content-type:text/html;charset=utf-8");// MySQLi方式串連資料庫$mysqli = new mysqli('localhost','root','123456789','test');// 使用utf-8編碼$mysqli -> query('set names utf8');// 開啟事務$mysqli -> autocommit(false);//SQL$sql1 = "UPDATE users SET `money`=`money`+1  WHERE `id` = 1";$sql2 = "UPDATE users SET `money`=`money`-1  WHERE `id` = 11";// 執行SQL語句$result = $mysqli -> query($sql1);$r1 = $mysqli -> affected_rows;$result = $mysqli -> query($sql2);$r2 = $mysqli -> affected_rows;if($r1 > 0 && $r2 > 0){    // 提交事務    $mysqli -> commit();    echo '操作成功';}else{    // 交易回復    $mysqli -> rollback();    echo '操作失敗';}

預先處理

預先處理,先提交SQL語句到服務端,執行先行編譯。

用戶端執行SQL語句時,只需要上傳輸入參數即可;

若涉及多次讀取或儲存,效率高於普通SQL執行操作。

1)$sql = “???”

SQL語句的VALUE裡面的參數,使用問號代替。

2)建立先行編譯對象

 $stmt = $mysqli -> prepare($sql)

3)參數賦值

$stmt -> bind_param('參數類型', 參數1, 參數2...)

參數類型說明:
string-s int-i double-d bool-b

特別提醒:
參數類型按照順序寫,不用空格、逗號,如參數1為string,參數2為bool,寫成這樣:
$stmt -> bind_param('si', 參數1, 參數2)

4)變數綁定結果集(查詢才需要這一步,其它操作跳過這步)

$stmt -> bind_result()

特別注意:
bind_result的變數對應select語句裡的欄位名,所以數量、順序千萬要注意!!!

5)執行代碼

$stmt -> execute()

6)查詢記錄存進PHP程式(查詢操作 可選)

$stmt->store_result()

詳細請看下面的連結

詳細解析

7)擷取每條記錄的結果

$stmt ->fetch()

執行個體

<?php// MySQLi預先處理(查詢) 例子header("content-type:text/html;charset=utf-8");// MySQLi方式串連資料庫$mysqli = new mysqli('localhost','root','123456789','test');// 使用utf-8編碼$mysqli -> query('set names utf8');// SQL語句$sql = "SELECT * FROM users WHERE id>? ";// 建立先行編譯對象$stmt = $mysqli -> prepare($sql);// 參數綁定$id = 1;$stmt -> bind_param('i',$id);// 綁定結果集   參數要和表的參數一致$stmt -> bind_result($id,$name,$money,$age);// 執行SQL語句$stmt -> execute();// 執行SQL語句$stmt->store_result();// 接收結果集while($stmt -> fetch()){    $data[] = [        'id' => $id,        'name' => $name,        'money' => $money    ];}var_dump($data);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.