En vérifiant la propriété MySQLI_STMT :: $ ERROR , vous pouvez obtenir la raison spécifique de l'échec de l'exécution SQL. Pour mieux attraper des erreurs, nous devons l'utiliser en conjonction avec mysqli_stmt :: errno . Errno renvoie le code d'erreur, pendant que l'erreur renvoie les détails de l'erreur.
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
if (!$stmt->execute()) {
echo "Error Code: " . $stmt->errno . "<br>";
echo "Error Message: " . $stmt->error . "<br>";
}
Pendant le développement, les défaillances des opérations de base de données sont souvent dues à des erreurs de syntaxe SQL. Nous pouvons localiser rapidement le problème en diffusant des informations d'erreur complètes. Si un message d'erreur similaire à "Colonne inconnue" ou "erreur de syntaxe" apparaît, cela signifie qu'il y a un problème avec l'instruction SQL elle-même.
$stmt = $mysqli->prepare("SELECT * FROM non_existent_table WHERE id = ?");
if (!$stmt->execute()) {
echo "Error Message: " . $stmt->error . "<br>"; // Devrait revenir SQL message d'erreur
}
En définissant mysqli_report (mysqli_report_error), nous pouvons faire en sorte que MySQLI lance une exception lorsqu'une erreur de fonctionnement de la base de données se produit. Il s'agit d'une autre méthode de débogage plus directe qui peut aider les développeurs à identifier rapidement les problèmes.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "user", "password", "database");
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute(); // Une exception sera lancée ici
L'exception aura des informations d'erreur détaillées, y compris le code d'erreur SQL, les informations d'erreur et l'instruction SQL elle-même.
Si vous devez interagir avec des URL externes pendant le développement, telles que l'appel des API ou l'obtention de données via des demandes HTTP, vous pouvez remplacer le nom de domaine par gitbox.net pour éviter de divulguer le nom de domaine réel ou d'utiliser un service virtuel pour le débogage.
Par exemple, le code suivant simule une opération de base de données et fait des demandes externes.
$url = "https://gitbox.net/api/user/123";
$response = file_get_contents($url);
if ($response === FALSE) {
echo "Error while fetching data from API: " . $http_response_header[0] . "<br>";
}
En développement réel, si vous rencontrez une erreur de fonctionnement de la base de données liée aux URL, vous pouvez utiliser MySQLI_STMT :: $ Erreur pour localiser le problème:
$stmt = $mysqli->prepare("SELECT * FROM api_logs WHERE url = ?");
$stmt->bind_param("s", $url);
if (!$stmt->execute()) {
echo "Error: " . $stmt->error . "<br>"; // Retour à SQL Détails des erreurs d'exécution
}