0

我有以下代码用于检查数据库(对于一个类)的约束。您正在尝试获取查询返回的行数,但我一直在线上遇到相同的错误

$count1= $ires1->numRows(MDB2_FETCHMODE_ASSOC);

错误:

> Call to a member function numRows() on a non-object

我一直在拔头发,因为我的其他类似于这个的功能工作正常,这是唯一不起作用的功能。有什么突出的吗?

参数 $db 只是到我的数据库的连接,pno是一个整数并且essn是文本..所以我不确定我做错了什么..

<?php
function submitCheck($db){
    $essn= $_POST['essn'];
    $pno=$_POST['pno'];

    $query1 = "select * from works_on where pno=? and essn=?";
    $types1 = array('integer','text');
    $stmt1 = $db->prepare($query1, $types1, MDB2_PREPARE_MANIP);

    if (MDB2::isError($stmt1)) {
        print("bad prepared statement:" . $stmt->getMessage());
    }

    $queryargs1 = array($pno, $essn);
    $ires1 = $stmt1->execute($queryargs1);
    $count1= $ires1->numRows(MDB2_FETCHMODE_ASSOC);
    //print("The project number entered was $count1[pno]");
    if(!(count($count1)==0)){
        print("The employee is already part of this project! If you want to update the hours, please select update!");
        return false;
    }
    return true;
}
?>
4

1 回答 1

2
$count1 = $stmt1->rowCount();

$ires1不是Object,而是boolean,如PHP PDOStatement::rowcount文档中所述。

但是,来自 PHP.net 站点的警告:

如果关联执行的最后一条 SQL 语句PDOStatement是一条 SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,不能保证所有数据库都具有此行为,并且不应依赖于可移植应用程序。

您也有他们建议的解决方案:

对于大多数数据库, PDOStatement::rowCount()不返回受SELECT语句影响的行数。相反,使用 PDO::query()发出SELECT COUNT(*)与预期 SELECT 语句具有相同谓词的语句,然后使用 PDOStatement::fetchColumn()检索将返回的行数。然后,您的应用程序可以执行正确的操作。”

我不知道,也找不到有关 methodnumRows的信息,所以我只能这样了。祝你好运!

于 2011-04-28T20:24:50.403 回答