mysqli 返回一条结果_php中mysqli 处理查询结果集总结
在PHP開發(fā)中,我們經(jīng)常會與數(shù)據(jù)庫打交道。我們都知道,一般的數(shù)據(jù)處理操作流程為
接收表單數(shù)據(jù)
數(shù)據(jù)入庫
//連接數(shù)據(jù)庫
$link = mysqli_connect("my_host", "my_user", "my_password", "my_db", "my_port");
//設(shè)置字符編碼
mysqli->query("SET NAME {$conf['charset']}");
//設(shè)置時區(qū)
date_default_timezone_set('PRC');
//拼接SQL語句
$sql = "…………";
//執(zhí)行SQL語句
$res = mysqli->query($sql);
//根據(jù)執(zhí)行后返回結(jié)果判斷是否操作成功
if($res){
//數(shù)據(jù)庫操作成功后的處理
}else{
//數(shù)據(jù)庫操作成功后的處理
}
當(dāng)在上面的$sql為查詢語句時,在if($res)后,我們一般會對得到的結(jié)果集進(jìn)行一系列的操作。
最基本的就是使用mysqli_result類處理結(jié)果集,主要有以下幾種方法:
fetch_all() :抓取所有的結(jié)果行并且以關(guān)聯(lián)數(shù)據(jù),數(shù)值索引數(shù)組,或者兩者皆有的方式返回結(jié)果集。
fetch_array() :以一個關(guān)聯(lián)數(shù)組,數(shù)值索引數(shù)組,或者兩者皆有的方式抓取一行結(jié)果。
fetch_object() :以對象返回結(jié)果集的當(dāng)前行。
fetch_row() :以枚舉數(shù)組方式返回一行結(jié)果
fetch_assoc(): 以一個關(guān)聯(lián)數(shù)組方式抓取一行結(jié)果。
fetch_field_direct(): 以對象返回結(jié)果集中單字段的元數(shù)據(jù)。
fetch_field() :以對象返回結(jié)果集中的列信息。
fetch_fields() :以對象數(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ù)組類型
$n=0;
while($n
echo "ID:".$row[$n]["id"]."用戶名:".$row[$n]["name"]."密碼:".$row[$n]["password"]."
";
$n++;
}
fetch_array (以一個關(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"]."用戶名:".$row[1]."密碼:".$row["password"]."
";
}
//fetch_array方法不再有結(jié)果時返回返回NULL
//其返回結(jié)果可以是關(guān)聯(lián)數(shù)組也可以是數(shù)值數(shù)組索引,故$row["id"]、$row[1]都可以
fetch_object (以對象返回結(jié)果集的當(dāng)前行)
$sql="select * from user";
$result=$link->query($sql);
while($row=$result->fetch_object()){
echo "ID:".$row->id."用戶名:".$row->name."密碼:".$row->password."
";
}
//如果無更多的行則返回NULL
//返回的結(jié)果是對象,要以對象的方式調(diào)用
fetch_row (以枚舉數(shù)組方式返回一行結(jié)果)
$sql="select * from user";
$result=$link->query($sql);
while($row=$result->fetch_row()){
echo "ID:".$row[0]."用戶名:".$row[1]."密碼:".$row[2]."
";
}
//無更多行時返回NULL
//以數(shù)值下標(biāo)調(diào)用數(shù)組,a[0]正確、a["id"]則不正確
fetch_assoc (以一個關(guān)聯(lián)數(shù)組方式抓取一行結(jié)果)
$sql="select * from user";
$result=$link->query($sql);
while($row=$result->fetch_assoc()){
echo "ID:".$row["id"]."用戶名:".$row["name"]."密碼:".$row["password"]."
";
}
//無更多行時返回NULL
//以關(guān)聯(lián)索引訪問數(shù)組,a["id"]正確、a[0]則不正確
fetch_field_direct (以對象返回結(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ù)類型:".$row->type."
";
}
//fetch_field_direct($n)只返回單個列,所以得不斷調(diào)用該方法,沒有該列時返回false
fetch_field (以對象返回結(jié)果集中的列信息)
$sql="select * from user";
$result=$link->query($sql);
while($row=$result->fetch_field()){
echo "列名:".$row->name."所在表:".$row->table."數(shù)據(jù)類型:".$row->type."
";
}
//該方法檢索所有的列
//以對象方式返回列信息
//返回對象屬性如:name - 列名,table - 該列所在的表名,type - 該列的類型等
fetch_fields (以對象數(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ù)類型:".$val->type."
";
}
//該方法功能與目的fetch_field一樣
//不一樣的是該方法返回一個對象數(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"]."用戶名:".$row["name"]."密碼:".$row["password"]."
";
}
其他示例代碼皆可用foreach替代。
foreach和while兩者的不同之處在于它們背后的運作方式:
在while循環(huán)里,Perl會讀入一行輸入,把它存入某個變量并且執(zhí)行循環(huán)主體。然后,它再回頭去找其他的輸入行。
在foreach循環(huán)中,整行輸入操作符會在列表上下文中執(zhí)行(因為foreach需要逐行處理列表的內(nèi)容)。在循環(huán)開始執(zhí)行之前,它必須先將輸入全部讀進(jìn)來。
當(dāng)輸入大容量的文件時,使用foreach會占用大量的內(nèi)存。兩者的差異會十分明顯。因此,最好的做法,通常是盡量使用while循環(huán)的簡寫,讓它每次處理一行。PHP中for、foreach和while比較
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的mysqli 返回一条结果_php中mysqli 处理查询结果集总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米wifi放大器pro无法连接如何解决
- 下一篇: 路由器设置提高网速(路由器这样设置,不仅