在将php5.3的程序向php7迁移过程中 出现这样的问题:
1、我将mysql全换成mysqli
2、在判断mysql结果集时正确,能够正常得到结果,但是换成mysqli后也能够得到结果
现在问题原因是
换成mysqli后,is_resource()方法判断mysqli结果集的结果为false
上源代码 代码出自某商城程序
<code>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);
}</code>输出的结果
国微CMS企业方案基于“核心+系统+模块+插件”的架构体系,拓展性良好。能非常方便站长及企业搭建企业信息平台。 手机短信体系平台A、 每个售后问题回复,客户均可收到快捷通知短信。B、 每个货物发送,均有一个快捷短信息发给收货方。C、 每个客户均可按实际需求收到手机短信回复与问候。D、每个订单申请都会有一个快捷短信回复。E、每个代理商申请代理均可得到短信回复。
0
<code>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'])</code>刚刚查了下php.net的说明发现resource类型中存在mysql结果类型而不存在mysqli结果类型
在将php5.3的程序向php7迁移过程中 出现这样的问题:
1、我将mysql全换成mysqli
2、在判断mysql结果集时正确,能够正常得到结果,但是换成mysqli后也能够得到结果
现在问题原因是
换成mysqli后,is_resource()方法判断mysqli结果集的结果为false
上源代码 代码出自某商城程序
<code>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);
}</code>输出的结果
<code>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'])</code>刚刚查了下php.net的说明发现resource类型中存在mysql结果类型而不存在mysqli结果类型
如果要判断结果集是否存在数据可以使用mysqli结果集对象里的num_rows属性:
<code>$mysqli_result = $mysqli->query($sql); var_dump($mysqli_result->num_rows);</code>
原因 @thou95 已经说了,替换方法可以这么写
<code class="php">static function sqlOfUpdate(mysqli_result &$rs, $data, $InsertIfNoResult = false,$insertData=null,$ignore=false){
...</code>在rs参数定义的时候加上mysqli_result类型就行了
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号