0

こんにちは、PDO で関数を作成しようとしましたが、エラーが発生しました (PDO の新規) ここに私のコードがあります

    function mail_id($mail){
    global $host, $dbname, $user, $pass;
    $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    $STH = $DBH->query("select count(from) from messages where from = '$mail'");
    $STH->setFetchMode(PDO::FETCH_ASSOC);
    $row = $STH->fetch();
    return $row;
}

行 FROM をカウントしたいのですが、ここに私が試していた出力があります

$mail=mail_id($userid);
if (0<count($mail['to_viewed'])) {echo "green";} else {echo "gray";}

これがエラーです

Call to a member function setFetchMode() on a non-object

助けてくださいthx

4

1 に答える 1

1

の戻り値を確認する必要がありますPDO::query()。(醜い)PHPには、混合型の値を返す関数がたくさんあります。ドキュメントのプロトタイプには別のことが書かれていますがPDO::query()、returnタイプの場合はまたはboolです。PDOStatement

説明:
PDOStatement PDO::query ( string $statement )
...

常にを返すように見えますPDOStatement

戻り値:
PDO :: query()はPDOStatementオブジェクトを返し、失敗した場合はFALSEを返します。

おっと、すべての場合ではありません!したがって、返される値がであるとは限りませんPDOStatement

正しいプロトタイプは次のようになります。

説明:
mixed PDO::query ( string $statement )
...

あなたの場合、クエリは無効であり(FROMなどの予約済みキーワードを列名として使用することにより)、値がFALSEのブール型の戻り値になります。ブール値はオブジェクトではないため、への呼び出しは$STH->setFetchMode()失敗します。

PDO :: ATTR_ERRMODEに応じて、

  • 例外(PDO :: ERRMODE_EXCEPTION)なので、戻り値を確認する必要はありません
  • 警告(PDO :: ERRMODE_WARNING)
  • 何もない(PDO :: ERRMODE_SILENT)ので、戻り値を確認する必要がありますerrorCode()errorInfo()
于 2012-05-22T23:44:01.363 に答える