摘要:最基本的就是使用類處理結果集,主要有以下幾種方法抓取所有的結果行并且以關聯數據,數值索引數組,或者兩者皆有的方式返回結果集。以對象返回結果集中單字段的元數據。以對象數組返回代表結果集中的列信息。
在PHP開發中,我們經常會與數據庫打交道。我們都知道,一般的數據處理操作流程為
接收表單數據
數據入庫
//連接數據庫 $link = mysqli_connect("my_host", "my_user", "my_password", "my_db", "my_port"); //設置字符編碼 mysqli->query("SET NAME {$conf["charset"]}"); //設置時區 date_default_timezone_set("PRC"); //拼接SQL語句 $sql = "…………"; //執行SQL語句 $res = mysqli->query($sql); //根據執行后返回結果判斷是否操作成功 if($res){ //數據庫操作成功后的處理 }else{ //數據庫操作成功后的處理 }
當在上面的$sql為查詢語句時,在if($res)后,我們一般會對得到的結果集進行一系列的操作。
最基本的就是使用mysqli_result類處理結果集,主要有以下幾種方法:
fetch_all() :抓取所有的結果行并且以關聯數據,數值索引數組,或者兩者皆有的方式返回結果集。
fetch_array() :以一個關聯數組,數值索引數組,或者兩者皆有的方式抓取一行結果。
fetch_object() :以對象返回結果集的當前行。
fetch_row() :以枚舉數組方式返回一行結果
fetch_assoc(): 以一個關聯數組方式抓取一行結果。
fetch_field_direct(): 以對象返回結果集中單字段的元數據。
fetch_field() :以對象返回結果集中的列信息。
fetch_fields() :以對象數組返回代表結果集中的列信息。
fetch_all (從結果集中取得所有行作為關聯數組)
$sql="select * from user"; $result=$link->query($sql); $row=$result->fetch_all(MYSQLI_BOTH);//參數MYSQL_ASSOC、MYSQLI_NUM、MYSQLI_BOTH規定產生數組類型 $n=0; while($n"; $n++; }
fetch_array (以一個關聯數組,數值索引數組,或者兩者皆有的方式抓取一行結果)
$sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_array()){ echo "ID:".$row["id"]."用戶名:".$row[1]."密碼:".$row["password"]."
"; } //fetch_array方法不再有結果時返回返回NULL //其返回結果可以是關聯數組也可以是數值數組索引,故$row["id"]、$row[1]都可以
fetch_object (以對象返回結果集的當前行)
$sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_object()){ echo "ID:".$row->id."用戶名:".$row->name."密碼:".$row->password."
"; } //如果無更多的行則返回NULL //返回的結果是對象,要以對象的方式調用
fetch_row (以枚舉數組方式返回一行結果)
$sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_row()){ echo "ID:".$row[0]."用戶名:".$row[1]."密碼:".$row[2]."
"; } //無更多行時返回NULL //以數值下標調用數組,a[0]正確、a["id"]則不正確
fetch_assoc (以一個關聯數組方式抓取一行結果)
$sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_assoc()){ echo "ID:".$row["id"]."用戶名:".$row["name"]."密碼:".$row["password"]."
"; } //無更多行時返回NULL //以關聯索引訪問數組,a["id"]正確、a[0]則不正確
fetch_field_direct (以對象返回結果集中單字段的元數據既單列的信息)
$sql="select * from user"; $result=$link->query($sql); $n=0; while(1){ if(!$row=$result->fetch_field_direct($n++)) break; echo "列名:".$row->name."所在表:".$row->table."數據類型:".$row->type."
"; } //fetch_field_direct($n)只返回單個列,所以得不斷調用該方法,沒有該列時返回false
fetch_field (以對象返回結果集中的列信息)
$sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_field()){ echo "列名:".$row->name."所在表:".$row->table."數據類型:".$row->type."
"; } //該方法檢索所有的列 //以對象方式返回列信息 //返回對象屬性如:name - 列名,table - 該列所在的表名,type - 該列的類型等
fetch_fields (以對象數組返回代表結果集中的列信息)
$sql="select * from user"; $result=$link->query($sql); $row=$result->fetch_fields(); foreach($row as $val){ echo "列名:".$val->name."所在表:".$val->table."數據類型:".$val->type."
"; } //該方法功能與目的fetch_field一樣 //不一樣的是該方法返回一個對象數組(如:echo $row[0]->name;輸出第一列的名字),而不是一次檢索一列
以上的循環除了while皆可替代為foreach,如:
$sql="select * from user"; $result=$link->query($sql); $data=$result->fetch_assoc(); foreach($data as $row){ echo "ID:".$row["id"]."用戶名:".$row["name"]."密碼:".$row["password"]."
"; }
其他示例代碼皆可用foreach替代。
foreach和while兩者的不同之處在于它們背后的運作方式:
在while循環里,Perl會讀入一行輸入,把它存入某個變量并且執行循環主體。然后,它再回頭去找其他的輸入行。
在foreach循環中,整行輸入操作符會在列表上下文中執行(因為foreach需要逐行處理列表的內容)。在循環開始執行之前,它必須先將輸入全部讀進來。
當輸入大容量的文件時,使用foreach會占用大量的內存。兩者的差異會十分明顯。因此,最好的做法,通常是盡量使用while循環的簡寫,讓它每次處理一行。PHP中for、foreach和while比較
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29417.html
摘要:參考中如何防止注入參數化查詢為什么能夠防止注入上面提供的資料比較多,下面根據自己的理解整理出來。使用的預處理參數化查詢可以有效防止注入。我們在上面預處理參數化查詢是在中進行防注入操作的,其實也內置了一個預處理的模擬器,叫做。 由于segmentfault在處理特殊字符時也并非完美,所以下面文章中有些符號被轉換了,請到本人博客下載原文txt http://www.yunxi365.cn/...
摘要:操作操作的三種方式非永久連接,性能比較低,以后廢棄永久連接,減輕服務器壓力,只支持能實現的常用功能,支持大部分數據庫擴展查看函數配置文件方式連接數據庫設置的字符集連接數據庫選擇數據庫設置字符集方式執行語句對之類的操作,執行成功時返回出錯 PHP操作MySQL PHP操作MySQL的三種方式: MySQL:非永久連接,性能比較低,PHP5.5以后廢棄; MySQLi:永久連接,...
閱讀 2650·2021-11-25 09:43
閱讀 670·2021-11-12 10:36
閱讀 4615·2021-11-08 13:18
閱讀 2168·2021-09-06 15:00
閱讀 3106·2019-08-30 15:56
閱讀 924·2019-08-30 13:57
閱讀 1985·2019-08-30 13:48
閱讀 1413·2019-08-30 11:13