PHP mySQL numRows()用法和错误?

时间:2011-04-28 20:05:04

标签: php mysql mysql-num-rows

我有以下代码用于检查数据库(对于类)的约束。你试图获取查询返回的行数,并在行

上继续得到相同的错误
$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;
}
?>

1 个答案:

答案 0 :(得分: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()来   检索将要的行数   被退回那么您的申请可以   执行正确的操作。“

我不知道,我找不到方法numRows的信息,所以这就是我可以去的地方。祝你好运!