关于is_resource()方法的问题问题
在将php5.3的程序向php7迁移过程中 出现这样的问题:
1、我将mysql全换成mysqli
2、在判断mysql结果集时正确,能够正常得到结果,但是换成mysqli后也能够得到结果
现在问题原因是
换成mysqli后,is_resource()方法判断mysqli结果集的结果为false
上源代码 代码出自某商城程序
static function sqlOfUpdate(&$rs, $data, $InsertIfNoResult = false,$insertData=null,$ignore=false){
$db = kernel::database();
var_dump($rs,is_resource($rs['rs']));exit;
if(!is_resource($rs['rs'])){
trigger_error('SqlOfUpdate: '.$rs['sql'].' error ',E_USER_ERROR);
}
@mysqli_data_seek($rs['rs'],0);
$row = mysqli_fetch_assoc($rs['rs']);
if($InsertIfNoResult && !$row){
return self::getinsertsql($rs,$data);
}
输出的结果
array(2) {//$rs
["rs"]=>
object(mysqli_result)#74 (5) {
["current_field"]=>
int(0)
["field_count"]=>
int(4)
["lengths"]=>
NULL
["num_rows"]=>
int(0)
["type"]=>
int(0)
}
["sql"]=>
string(115) "select * from `sdb_base_cache_expires` where 1 AND `type` = "DB" AND `app` = "base" AND `name` = "BASE_APP_CONTENT""
}
bool(false)//is_resource($rs['rs'])
刚刚查了下php.net的说明发现resource类型中存在mysql结果类型而不存在mysqli结果类型
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
mysqli的结果集是一个对象,使用is_resource函数当然是false,没什么好纠结的
如果要判断结果集是否存在数据可以使用mysqli结果集对象里的num_rows属性:
原因 @thou95 已经说了,替换方法可以这么写
在rs参数定义的时候加上
mysqli_result
类型就行了