1

古いmysql_*関数からPDOにいくつかのコードを更新しています。問題なく接続し、問題なくクエリを実行しますが、結果セットは空です。PDO :: query()はPDOStatementオブジェクトを返すことになっていますが、その代わりにtrueを取得しています。エラーは報告されません。

これが私のコードです:


try
{
    $DB = new PDO("mysql:host=localhost;dbname=dbname", "user", "pass");
    $stmt = $DB->prepare("SELECT * FROM report_clientinfo");
    $stmt->execute();
}catch(PDOException $e)
{
    echo $e->getMessage() . "\n";
}


echo gettype($stmt) . "\n";
if ($stmt) echo "true\n";
else echo "false\n";

$resultset = $stmt->fetchAll();

if(empty($resultset))
{
    exit("ERROR: getClientInfo query failed.");
}

$DB = null;

print_r($resultset);

私が見ている出力は次のとおりです。

オブジェクトtrueエラー:getClientInfoクエリが失敗しました。

結果が返されない理由はありますか?

4

2 に答える 2

5
object  
true  
ERROR: getClientInfo query failed.

あなたのPDOStatement $stmt変数は実際には「」ではなくオブジェクトであると報告されているようtrueです。が null でないことがわかると、コードは " true"を出力$stmtします。これはオブジェクトであるためです。

からの戻り値を確認することをお勧めします$stmt->execute()。SQL エラーが発生している可能性があります。たとえば、テーブル名のつづりを間違えた場合や、dbname接続したデータベース " " にテーブルが存在しない場合、ログインしたユーザーにそのテーブルをクエリする権限がない場合などです。

また$stmt->errorInfo()、発生したエラーの詳細を確認してください。

于 2009-01-02T01:22:24.733 に答える
0

間違った DSN を指していたことを報告するのは少し恥ずかしいです。大晦日に出かけた後、ほんの数時間の睡眠で何か新しいことを学ぼうとするのは、それが私が得たものだと思います. PDOStatement::errorInfo() メソッドに関するヒントをありがとう、私は以前に気づいていませんでした。

于 2009-01-02T03:31:20.090 に答える