2016-09-15 3 views
0

これはPHPの3日目です。私は意図的に$db代わりの$conn使用データ -PHP5 PDOでキャッチしよう

$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

try 
{ 
    $sql = "SELECT LoginName FROM users WHERE LoginName = :LoginName"; 
    $statement = $db->prepare($sql); //intentionally used $db here 
    $statement->bindParam(':LoginName', $LoginName, PDO::PARAM_STR, 50); 
    $statement->execute(); 
    $count= $statement->rowCount(); 
} 
catch(PDOException $e) 
{ 
    header('Content-Type: application/json'); 
    echo json_encode(array('result'=>'Error','data'=> $e->getMessage()));  
} 

を選択するために、次のコードを持っています。だから例外があるはずです。しかし、私のAjaxコールでは$e->getMessage()catchブロックから送信されていません。

助けが必要ですか?ここで

+0

いいえ、例外ではありません。 'nullでコールするメソッド'のPHP警告です.Core PHPは例外をスローしません。 PHPはOOPをサポートしていますが、OOP自体はネイティブではありません。したがって、PHP言語レベルのエラーは例外をスローしません。 –

答えて

1

は、それが、このハンドラHOがスクリプトで発生する可能性のあるすべてのエラーを処理し、まず

を行う必要があり、それはPDOまたは何か他のことがどのようです。本質的には

set_error_handler("myErrorHandler"); 
function myErrorHandler($errno, $errstr, $errfile, $errline) 
{ 
    error_log("$errstr in $errfile:$errline"); 
    header('HTTP/1.1 500 Internal Server Error', TRUE, 500); 
    header('Content-Type: application/json'); 
    echo json_encode(array('result'=>'Error', 'data'=>'Server error')); 
    exit; 
} 

、あなたのPDOコードをこのように作る

$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$sql = "SELECT 1 FROM users WHERE LoginName = ?"; 
$statement = $db->prepare($sql); //intentionally used $db here 
$statement->execute([$LoginName]); 
$found = $statement->fetchColumn(); 

、あなたはこれらのルールに従ってください:

  • はエラー
  • を報告しようとキャッチ演算子を使用することはありません明らかにしたことがありませんアウトサイダーに本当の誤り。単に一般的なメッセージです。
+0

set_error_handler()はどこで書きますか? –

+0

設定ファイルのどこにでもある –

+0

設定ファイルはphp.iniを意味しますか? –

関連する問題