我有以下代码用于检查数据库(对于类)的约束。你试图获取查询返回的行数,并在行
上继续得到相同的错误$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;
}
?>
答案 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
的信息,所以这就是我可以去的地方。祝你好运!