一.mysqli概念
從php5.0開始可以使用mysqli,是乙個物件導向的技術
mysql是非持續鏈結資料庫,mysql每次鏈結都會開啟乙個鏈結的程序
mysqli是永久鏈結函式,多次執行mysqli將使用同一鏈結程序,從而減少伺服器的開銷
功能增加了,mysqli封裝了諸如事物等一些高階操作
二.mysqli擴充套件
1.使用mysqli,需要載入mysqli擴充套件庫,請確定 php.ini 開啟mysqli庫擴充套件:
extension_dir = "f:/wamp/php-5.4.45/ext"
extension=php_mysqli.dll
2.使用 extension_loaded() 函式可以檢測mysqli庫擴充套件是否開啟
bool extension_loaded('mysqli');
三.使用mysqli運算元據庫
在php指令碼中使用mysqli運算元據庫步驟如下:
連線mysql資料庫伺服器
選擇資料庫
設定字符集
準備並執行sql語句
處理結果集
釋放結果集資源
關閉資料庫連線
四.鏈結mysql,並選擇資料庫
1.方法一:
$mysqli=new mysqli("127.0.0.1:3306","root","123456","eshop");
方法二:
$mysqli=new mysqli();
$mysqli->connect("127.0.0.1:3306","root","123456");
$mysqli->select_db("eshop");
2.$mysqli->connect_errno;
返回錯誤號
如果未發生任何錯誤,connect_errno()函式將返回0
$mysqli->connect_error;
返回錯誤資訊
3.設定漢字編碼
$mysqli->set_charset("utf8");
五.執行sql語句
$mysqli->query($sql);
描述:執行sql查詢(查詢指所有sql命令的統稱)
如果sql為select、show等查詢語句,正確執行時將返回資源結果集,錯誤執行將返回false;
如果sql為insert、update、delete等操作語句時,正確執行將返回true,錯誤執行將返回false。
六.處理資源結果集
$result->num_rows
描述:返回結果集包含的記錄數目
$result->fetch_row()
描述:從結果集抽取一行作為索引陣列返回,如果沒有更多的行,則返回false
$result->fetch_assoc()
描述:從結果集抽取一行作為關聯陣列返回,如果沒有更多的行,則返回false
$result->fetch_array( mysqli_both| mysqli_assoc |mysqli_num )
描述:從結果集抽取一行作為索引陣列/關聯陣列/兩者兼有返回,如果沒有更多的行,則返回false
$result->fetch_all(mysqli_num | mysqli_assoc | mysqli_both)
描述:從結果集抽取所有記錄
七.處理非查詢語句
$mysqli->affected_rows
返回受影響記錄的行數
-1代表操作失敗
0代表沒有受影響記錄
$mysqli->insert_id
在插入記錄時,返回最後插入記錄的主鍵id
八.釋放結果集資源,關閉資料庫連線
$result->free_result()
描述:釋放結果集
$mysqli->close();
描述:關閉連線
九.mysqli_stmt預處理類
和mysqli和mysqli_result相比優點:
1. mysqli和mysqli_result完成的功能,都可以使用mysqli_stmt完成
2. 效率上:高, 就是如果執行多次相同的語句,只有語句資料不同, 因為將一條語句在伺服器端準備好,然後將不同的值傳給伺服器,再讓這條語句執行編譯一次,使用多次
3. 安全上:sql注入(? 佔位) ,後期傳的值不會當成sql語句
mysqli_stmt的處理過程
1.鏈結資料庫
$mysqli=new mysqli('主機名','使用者名稱','密碼','庫名');
例:$mysqli=new mysqli("127.0.0.1:3306",'root','123456','yhshop');
2.//設定客戶端的漢字編碼
$mysqli->set_charset("utf8");
3.sql語句準備
插入語句
$sql="insert into yhshop(欄位名,...)values(?,?,?...)";
例://準備乙個要處理的sql語句
$sql="insert into yh_admin(username,password) value(?,?)";
4.預處理物件初始化
第一種進行預處理
$stmt=$mysqli->stmt_int();
$stmt->prepare($sql);
例:$stmt=$mysqli->stmt_init();
$stmt->prepare($sql);
第二種進行預處理
$stmt=$mysqli->prepare($sql);
例:$stmt=$mysqli->prepare($sql);
mysqli中也有prepare方法,並直接返回stmt預處理物件,可以省去stmt_init()方法
5.繫結引數
$stmt->bind_param('字段型別',分別對應的?的變數名);
例:$stmt->bind_param('ss',$username,$password);
型別有i-整型,d-浮點型,s-字串,b-二進位制
6.給引數賦值
例:$username='php1';
$password=md5('123');
執行sql語句
$stmt->execute();
最後一次插入的id
$stmt->insert_id;
最後一次操作影響的行數
$stmt->affected_rows;
例:if($stmt->execute());
有結果集的繫結結果集
$stmt->bind_result(分別對應結果集中的列所設定的變數);
結果集操作
while($stmt->fetch())
一次性將結果全部取出
$stmt->store_result();
結果條數
$stmt->num_rows;
指標移動到n(先執行store_result)
$stmt->data_seek(n);
釋放預處理結果
$stmt->close();
關閉mysqli
$mysqli->close();
十.事務處理
(多個sql要完成的任務看為是乙個事務)一件事(有任何乙個環節出錯,都整個事務撤消, 如果都成功才去提交)
目前只有innodb和bdb支援事務
預設表都是自動提交的(autocommit)
步驟:關閉自動提交 set autocommit=0
開啟事務
start transaction
sql執行
語句執行成功提交,語句執行失敗則回滾commit/rollback
關閉自動提交
$mysqli->autocommit(0);
開啟事務(php5.5之後才支援)
$mysqli->begin_transaction();
執行要操作sql語句
$res1=$mysqli->query("update yh_member set money=money-500 where user_name='rose'");
$res2=$mysqli->query("update yh_member set money=money+500 where user_name1='jack'");
出現錯誤則進行回滾,沒有錯誤則進行提交
if(!$res1 || !$res2)else
開啟自動提交
$mysqli->autocommit(1);
MySQLi擴充套件庫
方法一 如果返回true代表開啟成功,false代表開啟失敗 var dump extension loaded mysqli 方法二 檢視所有已開啟的擴充套件 返回值為乙個陣列 extension get loaded extensions 會顯示出所有的擴充套件 print r extensio...
54 mysqli 擴充套件庫
mysqli 擴充套件庫 在 php.ini 總啟用 mysqli擴充套件庫 extension php mysqli.dll header content type text html charset utf8 mysqli 操作 mysql 資料庫 物件導向風格 1.建立mysqli物件 mys...
MySQL i 擴充套件
在上一章的內容中有寫出php的幾種擴充套件,本章會開啟mysql i 擴充套件的篇章。注意 mysql i 擴充套件只支援mysql資料庫 1.如何連線資料庫 連線資料庫 conn new mysqli localhost root root text 2 3306 檢視連線是否正確 if link...