时间:2021-07-01 10:21:17 帮助过:4人阅读
上源代码 代码出自某商城程序
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.com的说明发现resource类型中存在mysql结果类型而不存在mysqli结果类型
在将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.com的说明发现resource类型中存在mysql结果类型而不存在mysqli结果类型
如果要判断结果集是否存在数据可以使用mysqli结果集对象里的num_rows属性:
$mysqli_result = $mysqli->query($sql);
var_dump($mysqli_result->num_rows);
原因 @thou95 已经说了,替换方法可以这么写
static function sqlOfUpdate(mysqli_result &$rs, $data, $InsertIfNoResult = false,$insertData=null,$ignore=false){
...
在rs参数定义的时候加上mysqli_result
类型就行了