PHP.15-mysqli

從PHP5.0開始可使用mysql(i), 是一個面嚮對象的技術(新加功能都會以對象形式添加)php

i:表示改進,1. 功能增長了, 2,效率大大增長(之後的PHP項目改爲mysqli),3,更穩定html


mysqli使用面向對象技術,但也支持過程化的使用方式mysql

mysqli擴展中給我提供了三個類:sql


1. mysqli和鏈接有關的類數據庫

2. mysqli_result表達了對數據庫的查詢所返回的結果集。編程

3. mysqli_stmt (後面重點介紹)數組

能夠選擇過程化編程,或是選擇面向對象技術安全

mysql(i)_connect()服務器

  面向對象:$mysqli = new $mysqli("localhost", "username", "password", "select_db");  //實例化對象fetch

  面向過程:$mysqli = mysqli_connect("localhost", "username", "password", "select_db");
mysql(i)_select_db();
mysql(i)_query();


注:通常使用mysqli擴展就要使用面向對象的編程方式進行開發

 

一、mysqli處理結果集(mysqli_result)

 使用select語句後,獲得的結果集的處理

1、處理記錄
屬性:mysqli_num_rows();  //返回結果集中行的數量
方法:
data_seek();  //調整結果集指針到結果集任意一行
fetch_assoc();  //從結果集中取得一行做爲關聯數組
fetch_row();    //從結果集中取得行

注:經常使用的爲上面兩個
fetch_array();  //從結果集中取得一行做爲數字數組或關聯數組
fetch_object();  //從結果集中取得當前行,並做爲對象返回。

free_result();  //釋放結果內存

2、處理字段信息
field_count;  //返回最近查找的列數
current_field;  //獲取結果指針的當前字段偏移量
lengths;      //返回結果集中當前行的列的長度

fetch_field();    //從結果集中取得下一字段,並做爲對象返回。
fetch_fields();    //返回結果集中表明字段(列)的對象的數組,而後輸出每一個字段名稱、表格和最大長度

 

二、mysqli完成事務處理和一次執行多條sql語句

1、使用mysqli執行多條語句
a、就是沒有結果集(如:插入、更新、刪除等語句)
b、多條語句有結果集

2、使用mysqli完成事務處理
事務處理 (多個SQL要完成的任務看爲是一個事務)一件事(有任何一個環節出錯,都整個事務撤消, 若是都成功纔去提交)

目前只有InnoDB 支持事務 (MyISAM)

默認表都是自動提交的(autocommit)

1. 關閉自動提交

2. start事務(若是自動提交已經關閉,使用mysqli不須要開啓事務,PDO中則須要)

[start transaction:開啓事務,在mysql中輸入]

commit;    //提交事務

rollback;    //回滾當前事務

multi_query;   //執行多條數據庫語句

3、其餘的mysqli類的中的成員使用

三、mysqli預處理類

mysqli_stmt預處理類(推薦你使用的類)

	$mysqli=new mysqli("localhost", "root", "123456", "xsphpdb");

	//準備好一條語句放到服務器中,插入語句
	$sql="insert into shops(name, price, num, desn) values(?, ?, ?, ?)";

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

	//給佔位符號每一個?號傳值(綁定參數) i:整形  d:浮點  s:字符  b:二進制 
	$stmt->bind_param("sdis", $name, $price, $num, $desn);

	$name="zhangsan";
	$price=56.78;
	$num=66;
	$desn="hello good";	

	//執行
	$stmt->execute();
        $stmt->close();

  

和mysqli和mysqli_result相比優勢:
1. mysqli和mysqli_result參完成的功能,均可以使用mysqli_stmt完成

2. 效率上:高, 就是若是執行屢次相同的語句,只有語句數據不一樣, 由於將一條語句在服務器端準備好,而後將不一樣的值傳給服務器,再讓這條語句執行


編譯一次,使用屢次

3. 安全上:SQL注入(? 佔位) ,後期傳的值不會當成SQL語句

相關文章
相關標籤/搜索