摘要:最基本的就是使用類(lèi)處理結(jié)果集,主要有以下幾種方法抓取所有的結(jié)果行并且以關(guān)聯(lián)數(shù)據(jù),數(shù)值索引數(shù)組,或者兩者皆有的方式返回結(jié)果集。以對(duì)象返回結(jié)果集中單字段的元數(shù)據(jù)。以對(duì)象數(shù)組返回代表結(jié)果集中的列信息。
在PHP開(kāi)發(fā)中,我們經(jīng)常會(huì)與數(shù)據(jù)庫(kù)打交道。我們都知道,一般的數(shù)據(jù)處理操作流程為
接收表單數(shù)據(jù)
數(shù)據(jù)入庫(kù)
//連接數(shù)據(jù)庫(kù) $link = mysqli_connect("my_host", "my_user", "my_password", "my_db", "my_port"); //設(shè)置字符編碼 mysqli->query("SET NAME {$conf["charset"]}"); //設(shè)置時(shí)區(qū) date_default_timezone_set("PRC"); //拼接SQL語(yǔ)句 $sql = "…………"; //執(zhí)行SQL語(yǔ)句 $res = mysqli->query($sql); //根據(jù)執(zhí)行后返回結(jié)果判斷是否操作成功 if($res){ //數(shù)據(jù)庫(kù)操作成功后的處理 }else{ //數(shù)據(jù)庫(kù)操作成功后的處理 }
當(dāng)在上面的$sql為查詢(xún)語(yǔ)句時(shí),在if($res)后,我們一般會(huì)對(duì)得到的結(jié)果集進(jìn)行一系列的操作。
最基本的就是使用mysqli_result類(lèi)處理結(jié)果集,主要有以下幾種方法:
fetch_all() :抓取所有的結(jié)果行并且以關(guān)聯(lián)數(shù)據(jù),數(shù)值索引數(shù)組,或者兩者皆有的方式返回結(jié)果集。
fetch_array() :以一個(gè)關(guān)聯(lián)數(shù)組,數(shù)值索引數(shù)組,或者兩者皆有的方式抓取一行結(jié)果。
fetch_object() :以對(duì)象返回結(jié)果集的當(dāng)前行。
fetch_row() :以枚舉數(shù)組方式返回一行結(jié)果
fetch_assoc(): 以一個(gè)關(guān)聯(lián)數(shù)組方式抓取一行結(jié)果。
fetch_field_direct(): 以對(duì)象返回結(jié)果集中單字段的元數(shù)據(jù)。
fetch_field() :以對(duì)象返回結(jié)果集中的列信息。
fetch_fields() :以對(duì)象數(shù)組返回代表結(jié)果集中的列信息。
fetch_all (從結(jié)果集中取得所有行作為關(guān)聯(lián)數(shù)組)
$sql="select * from user"; $result=$link->query($sql); $row=$result->fetch_all(MYSQLI_BOTH);//參數(shù)MYSQL_ASSOC、MYSQLI_NUM、MYSQLI_BOTH規(guī)定產(chǎn)生數(shù)組類(lèi)型 $n=0; while($n"; $n++; }
fetch_array (以一個(gè)關(guān)聯(lián)數(shù)組,數(shù)值索引數(shù)組,或者兩者皆有的方式抓取一行結(jié)果)
$sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_array()){ echo "ID:".$row["id"]."用戶(hù)名:".$row[1]."密碼:".$row["password"]."
"; } //fetch_array方法不再有結(jié)果時(shí)返回返回NULL //其返回結(jié)果可以是關(guān)聯(lián)數(shù)組也可以是數(shù)值數(shù)組索引,故$row["id"]、$row[1]都可以
fetch_object (以對(duì)象返回結(jié)果集的當(dāng)前行)
$sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_object()){ echo "ID:".$row->id."用戶(hù)名:".$row->name."密碼:".$row->password."
"; } //如果無(wú)更多的行則返回NULL //返回的結(jié)果是對(duì)象,要以對(duì)象的方式調(diào)用
fetch_row (以枚舉數(shù)組方式返回一行結(jié)果)
$sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_row()){ echo "ID:".$row[0]."用戶(hù)名:".$row[1]."密碼:".$row[2]."
"; } //無(wú)更多行時(shí)返回NULL //以數(shù)值下標(biāo)調(diào)用數(shù)組,a[0]正確、a["id"]則不正確
fetch_assoc (以一個(gè)關(guān)聯(lián)數(shù)組方式抓取一行結(jié)果)
$sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_assoc()){ echo "ID:".$row["id"]."用戶(hù)名:".$row["name"]."密碼:".$row["password"]."
"; } //無(wú)更多行時(shí)返回NULL //以關(guān)聯(lián)索引訪問(wèn)數(shù)組,a["id"]正確、a[0]則不正確
fetch_field_direct (以對(duì)象返回結(jié)果集中單字段的元數(shù)據(jù)既單列的信息)
$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."數(shù)據(jù)類(lèi)型:".$row->type."
"; } //fetch_field_direct($n)只返回單個(gè)列,所以得不斷調(diào)用該方法,沒(méi)有該列時(shí)返回false
fetch_field (以對(duì)象返回結(jié)果集中的列信息)
$sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_field()){ echo "列名:".$row->name."所在表:".$row->table."數(shù)據(jù)類(lèi)型:".$row->type."
"; } //該方法檢索所有的列 //以對(duì)象方式返回列信息 //返回對(duì)象屬性如:name - 列名,table - 該列所在的表名,type - 該列的類(lèi)型等
fetch_fields (以對(duì)象數(shù)組返回代表結(jié)果集中的列信息)
$sql="select * from user"; $result=$link->query($sql); $row=$result->fetch_fields(); foreach($row as $val){ echo "列名:".$val->name."所在表:".$val->table."數(shù)據(jù)類(lèi)型:".$val->type."
"; } //該方法功能與目的fetch_field一樣 //不一樣的是該方法返回一個(gè)對(duì)象數(shù)組(如:echo $row[0]->name;輸出第一列的名字),而不是一次檢索一列
以上的循環(huán)除了while皆可替代為foreach,如:
$sql="select * from user"; $result=$link->query($sql); $data=$result->fetch_assoc(); foreach($data as $row){ echo "ID:".$row["id"]."用戶(hù)名:".$row["name"]."密碼:".$row["password"]."
"; }
其他示例代碼皆可用foreach替代。
foreach和while兩者的不同之處在于它們背后的運(yùn)作方式:
在while循環(huán)里,Perl會(huì)讀入一行輸入,把它存入某個(gè)變量并且執(zhí)行循環(huán)主體。然后,它再回頭去找其他的輸入行。
在foreach循環(huán)中,整行輸入操作符會(huì)在列表上下文中執(zhí)行(因?yàn)閒oreach需要逐行處理列表的內(nèi)容)。在循環(huán)開(kāi)始執(zhí)行之前,它必須先將輸入全部讀進(jìn)來(lái)。
當(dāng)輸入大容量的文件時(shí),使用foreach會(huì)占用大量的內(nèi)存。兩者的差異會(huì)十分明顯。因此,最好的做法,通常是盡量使用while循環(huán)的簡(jiǎn)寫(xiě),讓它每次處理一行。PHP中for、foreach和while比較
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29417.html
摘要:參考中如何防止注入?yún)?shù)化查詢(xún)?yōu)槭裁茨軌蚍乐棺⑷肷厦嫣峁┑馁Y料比較多,下面根據(jù)自己的理解整理出來(lái)。使用的預(yù)處理參數(shù)化查詢(xún)可以有效防止注入。我們?cè)谏厦骖A(yù)處理參數(shù)化查詢(xún)是在中進(jìn)行防注入操作的,其實(shí)也內(nèi)置了一個(gè)預(yù)處理的模擬器,叫做。 由于segmentfault在處理特殊字符時(shí)也并非完美,所以下面文章中有些符號(hào)被轉(zhuǎn)換了,請(qǐng)到本人博客下載原文txt http://www.yunxi365.cn/...
摘要:操作操作的三種方式非永久連接,性能比較低,以后廢棄永久連接,減輕服務(wù)器壓力,只支持能實(shí)現(xiàn)的常用功能,支持大部分?jǐn)?shù)據(jù)庫(kù)擴(kuò)展查看函數(shù)配置文件方式連接數(shù)據(jù)庫(kù)設(shè)置的字符集連接數(shù)據(jù)庫(kù)選擇數(shù)據(jù)庫(kù)設(shè)置字符集方式執(zhí)行語(yǔ)句對(duì)之類(lèi)的操作,執(zhí)行成功時(shí)返回出錯(cuò) PHP操作MySQL PHP操作MySQL的三種方式: MySQL:非永久連接,性能比較低,PHP5.5以后廢棄; MySQLi:永久連接,...
閱讀 2659·2021-11-25 09:43
閱讀 679·2021-11-12 10:36
閱讀 4643·2021-11-08 13:18
閱讀 2186·2021-09-06 15:00
閱讀 3123·2019-08-30 15:56
閱讀 941·2019-08-30 13:57
閱讀 1996·2019-08-30 13:48
閱讀 1422·2019-08-30 11:13