Dans PHP, l'erreur MySQLI_STMT :: $ est utilisée pour obtenir des informations d'erreur qui peuvent se produire lors de l'exécution de l'instruction de préparation. Bien que cette fonctionnalité soit très utile, de nombreux développeurs peuvent rencontrer des erreurs courantes dans des applications pratiques. Cet article couvrira ces cinq erreurs courantes et comment les éviter.
Avant d'exécuter une requête SQL, vous devez vous assurer que la connexion de la base de données est valide. Si la connexion de la base de données échoue avant l'exécution de l'instruction, l'erreur MySQLI_STMT :: $ ne renvoie pas le message d'erreur correctement.
Assurez-vous de créer correctement la connexion de la base de données à l'aide de mysqli_connect () ou de new mysqli () et de vérifier si la connexion réussit avant d'exécuter la requête. Voici un exemple simple:
<?php
// Connectez-vous à la base de données
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');
// Vérifiez la connexion
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Créer une déclaration de prétraitement
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if ($stmt === false) {
die("La création de déclaration de prétraitement a échoué: " . $mysqli->error);
}
?>
De cette façon, vous pouvez capturer le message d'erreur correct lorsque la connexion échoue.
Lorsque vous utilisez des instructions de prétraitement, l'erreur MySQLI_STMT :: $ peut ne pas renvoyer l'erreur que vous attendez si vous ne liez pas les paramètres correctement. Cette erreur se produit souvent lors de l'utilisation de bind_param () et de passer le mauvais type de paramètre ou la quantité.
Assurez-vous que le type de paramètre que vous passez pour bind_param () correspond à l'espace réservé dans la requête SQL. Par exemple, des chaînes sont utilisées pour S , les entiers sont utilisés pour I et les nombres à virgule flottante à double précision sont utilisés pour d .
<?php
// Supposons que nous voulons utiliser ID Effectuer une requête
$id = 1;
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id); // Notez que le type ici est "i" Indique les entiers
if ($stmt->execute()) {
// Exécuté avec succès
$result = $stmt->get_result();
} else {
// Gestion des erreurs
echo "message d'erreur: " . $stmt->error;
}
?>
De cette façon, s'assurer que les correspondances de type bind_param () peuvent éviter de telles erreurs.
Une autre erreur courante est que la requête SQL elle-même a des problèmes de syntaxe, qui peuvent provoquer des défaillances d'exécution, et MySQLI_STMT :: $ l'erreur peut vous aider à attraper des erreurs.
Lors de la rédaction de requêtes SQL, assurez-vous que la syntaxe est correcte. Vous pouvez utiliser MySQLI_ERROR () de PHP ou MySQLI_STMT :: $ Erreur pour aider à déboguer. Voici un exemple d'erreur SQL commun:
<?php
$stmt = $mysqli->prepare("SELEC * FROM users WHERE id = ?");
if ($stmt === false) {
die("Échec de la déclaration: " . $mysqli->error);
}
$stmt->bind_param("i", $id);
$stmt->execute();
?>
L'erreur ici est que SELECT est écrit comme selec , provoquant l'échec de la requête. Assurez-vous que les instructions SQL sont exemptes de fautes de frappe et utilisent mysqli_error () pour attraper des erreurs de syntaxe.
Si le type de champ dans la base de données ne correspond pas au type de données dans la requête, l'erreur MySQLI_STMT :: $ renvoie le message d'erreur pertinent.
Assurez-vous que le type de données inséré ou la requête est cohérent avec le type de champ défini dans la table de base de données. Si le champ dans le tableau est de type int et que vous passez une chaîne, cela peut provoquer une erreur.
<?php
$id = "string_instead_of_int";
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id); // Ici, vous devez passer un type entier $id
$stmt->execute();
?>
Assurez-vous que les paramètres liés sont cohérents avec le type de champ de base de données.
MySQLI_STMT :: $ L'erreur n'attrape pas toujours automatiquement toutes les erreurs, donc certaines erreurs peuvent être ignorées si la valeur de retour d' Execute () n'est pas vérifiée.
Vérifiez toujours la valeur de retour de la méthode EXECUTE () après avoir exécuté l'instruction. Si la valeur de retour est fausse , cela signifie que l'exécution a échoué. Vous pouvez utiliser MySQLI_STMT :: $ Erreur pour obtenir des informations d'erreur détaillées.
<?php
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
if (!$stmt->execute()) {
echo "Erreur d'exécution: " . $stmt->error;
}
?>
De cette façon, vous pouvez vous assurer que même si l'erreur n'est pas attrapée immédiatement, le problème peut être découvert et résolu en temps opportun.
MySQLI_STMT :: $ L'erreur est un outil puissant en PHP pour attraper les erreurs de déclaration de prétraitement MySQL, mais pour s'assurer qu'elle est utilisée correctement, les erreurs courantes doivent être évitées, telles que les mauvaises connexions de base de données, l'inadéquation dans les paramètres de liaison, les erreurs de retour SQL . En suivant ces meilleures pratiques, vous pouvez éviter efficacement ces problèmes, ce qui rend votre application plus robuste.