2011-01-17 11 views
1

私は自分のmysql_query()コールをPDOに変換していますが、を偽にする方法を理解していないと、の結果が失敗します。これは私のコードです:PDO結果を取得するには== false?

$STH = $DBH->query("SELECT * FROM articles ORDER BY category"); 
$STH->setFetchMode(PDO::FETCH_ASSOC); 
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); 

これは私がやろうとしているものですが、動作しません:

if($STH==false) { 
    foreach($dbh->errorInfo() as $error) { 
    echo $error.'<br />'; 
    } 
} 
+0

'false'または' true'を使って具体的に作業する場合は、常に結果を比較するために '==='(= x3)を使うべきです。 – RobertPitt

+0

@zerkms、私はjavascriptチームも '=='と思うと信じています – RobertPitt

答えて

2

PDOを使用して、通常は照会の性質がそうのようにダウンした場合:

try 
{ 
    $STH = $DBH->prepare("SELECT * FROM articles ORDER BY category"); //Notice the prepare 
    $STH->setFetchMode(PDO::FETCH_ASSOC); 
    //No need to silent as the errors are catched. 

    if($STH === false) //Notice the explicit check with !== 
    { 
     //Do not run a foreach as its not multi-dimensional array 
     $Error = $DBH->errorInfo(); 

     throw new Exception($Error[2]); //Driver Specific Error 
    } 
}catch(Exception $e) 
{ 
    //An error accured of some nature, use $e->getMessage(); 
} 

あなたはerrorInfoをよく読んで例を研究する必要があります。

+0

私は上記のコードを理解していません。エラーはどこに印刷されますか?そして、 "新しい例外を投げる($ Error [2]);"行う?なぜキー2? – bart

+0

キー2はドライバ固有のエラーです。これは、エラー情報の有効な説明を得る最良の機会です。私が投稿したerrorInfoリンクを見ると、これはすべて説明しています。例外はエラーをスローする方法です。 tryブロック内では、エラーを画面に表示することでアプリケーションに影響を与えないが、catchブロックに送信されるので、エラーをログに記録してエラーページをリダイレクト/表示することができます。詳細については、Exceptions and Try/Catchブロックを参照してください。 - 例外についてはこれをお読みください:http://php.net/manual/en/language.exceptions.php – RobertPitt

+0

Thx Robert Try/Catchは私には新しく、私はそれを検討しています。 – bart

関連する問題