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
相关产品推荐
相关产品推荐

