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();

$ires1PHP PDOStatement::rowcountドキュメントに記載されているように、Objectではなくです。boolean

ただし、PHP.net サイトからの警告:

関連によって実行された最後の SQL ステートメントがステートメントでPDOStatementあった SELECT場合、一部のデータベースは、そのステートメントによって返された行数を返す場合があります。ただし、この動作はすべてのデータベースで保証されているわけではなく、移植可能なアプリケーションに依存するべきではありません。

提案された解決策もあります:

ほとんどのデータベースで は、ステートメントPDOStatement::rowCount()の影響を受けた行数は返されません。SELECT代わりに、 を使用 して、目的の SELECT ステートメントと同じ述語を PDO::query()含むステートメントを発行し、を使用して、返される行数を取得します。その後、アプリケーションは正しいアクションを実行できます。」SELECT COUNT(*)PDOStatement::fetchColumn()

私は知りませんでしたし、メソッドに関する情報を見つけることができなかったnumRowsので、それは私ができる限りです。幸運を!

于 2011-04-28T20:24:50.403 に答える