关于is_resource()方法的问题问题
在将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结果类型
回复内容:
在将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的结果集是一个对象,使用is_resource函数当然是false,没什么好纠结的
如果要判断结果集是否存在数据可以使用mysqli结果集对象里的num_rows属性:
<code>$mysqli_result = $mysqli->query($sql); var_dump($mysqli_result->num_rows);</code>
原因 @thou95 已经说了,替换方法可以这么写
static function sqlOfUpdate(mysqli_result &$rs, $data, $InsertIfNoResult = false,$insertData=null,$ignore=false){ ...
在rs参数定义的时候加上mysqli_result
类型就行了

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
