当前位置: 首页 > 后端技术 > PHP

php中mysqli处理查询结果集总结

时间:2023-03-29 22:37:05 PHP

在PHP开发中,我们经常和数据库打交道。我们都知道一般的数据处理操作流程就是接收表单数据,放入数据库//连接数据库$link=mysqli_connect("my_host","my_user","my_password","my_db","my_port");//设置字符编码mysqli->query("SETNAME{$conf['charset']}");//设置时区date_default_timezone_set('PRC');//拼接SQL语句$sql="………";//执行SQL语句$res=mysqli->query($sql);//执行后根据返回结果判断操作是否成功if($res){//数据库操作成功后的处理}else{//数据库操作成功后的处理Processing}当上面的$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*fromuser";$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*fromuser";$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*fromuser";$result=$link->query($sql);while($row=$result->fetch_object()){echo"ID:".$row->id."Username:".$row->name."Password:".$row->password."
";}//如果没有morerows,returnNULL//返回的结果是一个对象,以对象的形式调用fetch_row(返回一行结果为枚举数组)$sql="select*fromuser";$result=$link->query($sql);而($row=$result->fetch_row()){echo"ID:".$row[0]."用户名:".$row[1]."密码:".$row[2]."
";}//没有更多行时返回NULL//用数字下标调用数组,a[0]正确,a["id"]不正确fetch_assoc(在关联数组中取一行结果)$sql="select*fromuser";$result=$link->query($sql);while($row=$result->fetch_assoc()){echo"ID:".$row["id"]."Username:".$row["name"]."Password:".$row["password"]."
";}//没有更多行时返回NULL//用关联索引访问Array,a["id"]正确,a[0]不正确fetch_field_direct(返回结果集中单个字段的元数据作为对象和单个列的信息)$sql="select*fromuser";$result=$link->query($sql);$n=0;while(1){if(!$row=$result->fetch_field_direct($n++))中断;echo"列名:".$row->name."表:".$row->table."数据类型:".$row->type."
";}//fetch_field_direct($n)只返回单个列,所以这个方法要不断调用,没有当这个列返回falsefetch_field(将结果集中的列信息作为对象返回)$sql="select*fromuser";$result=$link->query($sql);while($row=$result->fetch_field()){echo"列名:".$row->name."表:".$row->table."数据类型:".$row->type."
";}//检索所有列的方法//将列信息作为对象返回//返回对象属性如:name-列名、表-列所在表的名称,类型-列的类型等fetch_fields(返回对象数组中表示结果集的列信息)$sql="select*fromuser";$result=$link->query($sql);$row=$result->fetch_fields();foreach($rowas$val){echo"Columnname:".$val->name."inthetable:".$val->table."Datatype:".$val->type."
";}//这个方法的作用和purposefetch_field是一样的//不同的是这个方法返回一个objectarray(eg:echo$row[0]->name;输出第一列的名称),而不是一次检索多个列,循环可以用foreachexceptwhile代替,如:$sql="select*fromuser";$result=$link->query($sql);$data=$result->fetch_assoc();foreach($dataas$row){echo"ID:".$row["id"]."用户名:".$row["name"]."密码:".$row["password"]."
";}其他示例代码可以使用foreach代替foreach和while。获取一行输入,将其存储在一个变量中并执行循环体。然后,它返回寻找其他输入线。在foreach循环中,行输入运算符在列表上下文中执行(因为foreach需要逐行处理列表的内容)。在循环开始执行之前,它必须首先读入它的所有输入。输入大容量文件时,使用foreach会占用大量内存。两者之间的区别将非常明显。因此,最好的做法通常是尽可能使用while循环的简写形式,让它一次处理一行。PHP中for、foreach、while的比较