2016-09-15 1 views
0

Ceci est mon troisième jour sur PHP. Je le code suivant pour la sélection Data-try catch in 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()));  
} 

I intentionnellement utilisé $db au lieu de $conn. Donc, il devait y avoir une exception. Mais dans mon appel ajax, $e->getMessage() n'a pas été envoyé du bloc catch.

Une aide?

+0

Non, ce n'est pas une exception. C'est un avertissement PHP pour 'appeler la méthode sur null'.Core php ne lance pas d'exceptions. PHP supporte OOP, mais n'est pas nativement lui-même, donc aucune erreur de niveau PHP ne lèvera une exception. –

Répondre

1

Voici comment il être fait

Tout d'abord, définissez ce gestionnaire ho gérer toutes les erreurs qui peuvent se produire dans votre script, que ce soit AOP ou quoi que ce soit d'autre.

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; 
} 

puis faites votre code PDO ainsi

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

En substance, vous devez suivre ces règles:

  • ne jamais utiliser l'opérateur catch try signaler une erreur
  • ne jamais révéler une vraie erreur à un étranger. Juste un message générique
+0

Où dois-je écrire set_error_handler()? –

+0

Partout dans un fichier de configuration –

+0

le fichier de configuration signifie php.ini? –