You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中判断SQL查询是否有结果?mysql_num_rows报错求助

解决MDB2结果对象与mysql_num_rows不兼容的问题

嗨,别着急,这个问题其实很常见——你混用了PEAR MDB2数据库抽象层和原生MySQL扩展的函数,才导致了类型错误!

问题原因

你用MDB2::connect()建立连接,$db->query()返回的是一个MDB2结果对象,而mysql_num_rows()是原生MySQL扩展的函数,它只能接受原生mysql_query()返回的资源类型,自然会报错“期望参数为资源,但实际传入的是对象”。

解决方法

用MDB2结果对象自带的numRows()方法来获取结果集行数就可以了,这是MDB2专门提供的方法,和它的结果对象完全兼容。

修改后的关键代码片段:

$resultsFound = false;
// 替换mysql_num_rows为MDB2的numRows()方法
if ($res->numRows() > 0) {
    while($row=$res->fetchRow()){
        // 处理结果逻辑
    }
} else {
    echo "<br><h2>Sorry, invalid input</h2>";
}

完整修改后的代码参考

$dsn = "mysql://$username:$password@$host/$dbName";
require_once('MDB2.php');
$db =& MDB2::connect($dsn);

if(PEAR::isError($db)){
    die($db->getMessage());
}

$sql = "你的SQL查询语句"; // 替换成实际的查询语句
$res =& $db->query($sql);

if(PEAR::isError($res)){
    die($res->getMessage());
}

$resultsFound = false;
if ($res->numRows() > 0) {
    while($row=$res->fetchRow()){
        // 在这里处理每一行结果,比如 echo $row['字段名'];
    }
} else {
    echo "<br><h2>Sorry, invalid input</h2>";
}

小提示:以后使用MDB2这类抽象层时,尽量全程使用它提供的方法(比如fetchRow()、numRows()),不要和原生的mysql函数混用,这样能避免很多类似的类型错误哦~

内容的提问来源于stack exchange,提问作者Jeremy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 15:17:32