php怎么判断mysqli的结果集是否为空
今天做了一个简单的判断添加后台,主要判断这个链接在数据库中是否存在,如果不存在则开始添加,就是这么一个小功能,差点气翻我,上次这样还是mysqli_query查询为空不返回false的时候。大概一段时间没有碰mysqli了,忘记了怎么判断结果集是否为空,折腾了1个小时,最后才想起来,希望大家不要跟我一样健忘。
mysqli_query()不能用于判断
因为我学习mysqli的时候自己记过笔记,粗略的看了一眼,在我的潜意识中mysqli_query()查询成功就返回结果集,查询为空那不就是false了,于是我一开始是这样判断的
$re=mysqli_query($k,$sql);
if($re==false){
//执行添加语句,如果存在执行后面的代码
}
1
2
3
4
$re=mysqli_query($k,$sql);
if($re==false){
//执行添加语句,如果存在执行后面的代码
}
结果显而易见,即便是数据库确实没有任何数据,$re也绝对不会等于false,因为mysqli_query()不能用于判断查询是否为空!
我仔细的看了一遍我记录的关于mysqli_query()的笔记,终于发现了这样一句话:
mysqli_query() 仅对 SELECT,SHOW 或 DESCRIBE 语句返回一个mysqli_result结果集对象,如果查询执行不正确则返回 FALSE。
注意重点!查询不正确返回false,而不是查询为空返回false!!
粗心又浪费了我一个小时的时间,希望自己以后更加的细心。
mysqli_num_rows()才能用于判断
一番查找后找到了用于判断结果集是否为空的命令mysqli_num_rows(),它可以获取到结果集中的数据行数,这就好办了,将上面的错误代码进行以下修改:
$re=mysqli_query($k,$sql);
$num=mysqli_num_rows($re);
if($num==0){
//执行添加语句,如果存在执行后面的代码
}
1
2
3
4
5
$re=mysqli_query($k,$sql);
$num=mysqli_num_rows($re);
if($num==0){
//执行添加语句,如果存在执行后面的代码
}
经过测试,代码完美运行,如果结果集为空,mysqli_num_rows()获取的行数就为0,注意,mysqli_num_rows()仅对select语句有效。