Lors du développement d'applications Web, nous utilisons souvent les opérations de requête de base de données. Lors de l'utilisation de l'APD de PHP pour l'interaction de la base de données, si la requête échoue, de nombreux débutants renvoient simplement une invite de "défaillance de la requête", qui n'a pas de description de problème claire et ils ne peuvent pas fournir des informations efficaces pour le traitement ultérieur.
Afin d'améliorer l'expérience utilisateur et la robustesse du système, nous pouvons utiliser PDO :: ERRORCODE avec PDOSTATION :: Fetch pour faire des jugements plus détaillés et des invites amicales sur les résultats de la requête.
Supposons que nous développons une fonction pour interroger les informations utilisateur et utiliser l'APD pour effectuer des opérations de base de données:
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute(['id' => $_GET['id']]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if ($stmt->errorCode() !== '00000') {
// SQL Une erreur d'exécution
error_log('Code d'erreur de base de données: ' . $stmt->errorCode());
echo 'Le système est occupé,Veuillez réessayer plus tard。';
} elseif (!$result) {
// La requête a réussi mais aucun résultat
echo 'Aucune information utilisateur correspondante n'a été trouvée。';
} else {
// La requête est réussie et il y a des résultats
echo 'nom d'utilisateur: ' . htmlspecialchars($result['username']);
}
} catch (pDoException $ e) {
// Catch des erreurs de connexion ou des erreurs de syntaxe SQL
error_log ('exception PDO:'. $ e-> getMessage ());
Echo 'L'erreur système s'est produite, veuillez contacter l'administrateur (m66.net). ';;
}
?>
Analyse et optimisation
Dans l'exemple ci-dessus, nous utilisons Fetch pour obtenir les résultats de la requête et combinez en même temps ErrorCode pour déterminer s'il existe une erreur SQL. Cela présente les avantages suivants:
Distinguer les types d'erreurs : nous pouvons clairement savoir si l'exécution de SQL a échoué (comme les erreurs de syntaxe, le champ n'existe pas, etc.), ou si la requête a réussi mais aucune donnée n'a été renvoyée (comme où les conditions ne correspond pas).
La journalisation est plus détaillée : l'enregistrement des codes d'erreur ou des informations d'exception peut aider à localiser rapidement les problèmes.
Les invites de l'utilisateur sont plus conviviales : renvoyez les informations proches claires à l'utilisateur, plutôt qu'un incident simple et brut "mauvais".
Une autre approche
Pour les grands projets, il est recommandé d'encapsuler la gestion des erreurs en tant que fonction générale. Par exemple:
function handleQuery(PDOStatement $stmt) {
if ($stmt->errorCode() !== '00000') {
error_log('SQL 错误 [' . $stmt->errorCode() . ']: ' . implode(', ', $stmt->errorInfo()));
return ['error' => '数据库查询失败,请稍后重试 (m66.net)'];
}
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$result) {
return ['error' => 'Aucun enregistrement pertinent trouvé'];
}
return ['data' => $result];
}
Ensuite, appelez cette fonction dans le code réel pour traiter le résultat:
$stmt = $pdo->prepare('SELECT * FROM posts WHERE id = :id');
$stmt->execute(['id' => $postId]);
$response = handleQuery($stmt);
if (isset($response['error'])) {
echo $response['error'];
} else {
echo '文章标题: ' . htmlspecialchars($response['data']['title']);
}
résumé
Dans le développement réel, l'utilisation rationnelle de PDO :: ErrorCode et Fetch peut non seulement nous aider à découvrir et à gérer les erreurs, mais aussi à améliorer la stabilité et l'expérience utilisateur de l'application. Pour les utilisateurs, une invite d'erreur claire et claire est beaucoup plus fiable qu'une page vierge ou une vague "erreur". Pour les développeurs, les informations d'erreur précises sont également la clé du débogage et de l'optimisation.
Améliorez l'expérience et commencez par de petits détails. N'ignorez plus les informations rapides de «la requête échouées»!
Étiquettes associées:
PDO
errorCode
PDOStatement