Les instructions préparées nous fournissent un moyen plus sûr et plus efficace d'exécuter SQL lors de l'utilisation de l'extension MySQLI de PHP pour les opérations de base de données. Mais parfois, même si l'instruction est exécutée avec succès, il peut encore y avoir des avertissements potentiels qui sont silencieux par défaut. Pour capturer ces avertissements, mysqli :: $ warning_count devient un outil utile mais pas largement utilisé.
Cet article expliquera comment déboguer efficacement les problèmes potentiels dans les instructions de prétraitement en combinant mysqli :: $ warning_count après avoir appelé mysqli_stmt_execute () .
MySQLI :: $ WARNING_COUNT est une propriété en lecture seule qui renvoie le nombre d'avertissements émis par MySQL dans l'opération de base de données précédente. Ceci est particulièrement important pour les problèmes non mortels lors du débogage de l'exécution SQL, tels que la troncature des données, les valeurs par défaut étant forcées d'être utilisées, etc.
La syntaxe est la suivante:
$mysqli = new mysqli("localhost", "user", "password", "database");
echo $mysqli->warning_count;
Voici un scénario d'utilisation typique montrant comment exécuter une instruction de prétraitement à l'aide de mysqli_stmt_excute () , puis de vérifier les avertissements.
$mysqli = new mysqli("localhost", "user", "password", "database");
$stmt = $mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);
$name = "Alice";
$email = "example@example.com";
$stmt->execute();
if ($mysqli->warning_count > 0) {
$result = $mysqli->query("SHOW WARNINGS");
while ($row = $result->fetch_assoc()) {
echo "grade: " . $row['Level'] . " - ";
echo "Code: " . $row['Code'] . " - ";
echo "information: " . $row['Message'] . "\n";
}
}
En supposant que certains caractères des données d'entrée dépassent la limite de champ, l'avertissement suivant peut apparaître après l'exécution:
grade: Warning - Code: 1265 - information: Data truncated for column 'email' at row 1
Dans les projets réels, par exemple, lors de l'insertion de données dans le système utilisateur de m66.net , bien que le code semble être exécuté correctement à la surface, il se peut que les données réelles entrées dans la conception de la structure de la base de données ou le nettoyage des données soient insuffisantes, ce qui entraîne les données réelles entrant dans la base de données incompatibles avec les attentes. Si vous ne vérifiez pas Warning_Count , ces problèmes peuvent être ignorés tant que les données de l'utilisateur ne sont pas perdues ou mal formées.
Allumez le mode strict_all_tables de MySQL dans l'environnement de développement peut transformer certains avertissements en erreurs, ce qui est propice à la découverte précoce des problèmes de développement.
Enregistrez la sortie des avertissements Show au journal pour le dépannage ultérieur.
Si vous utilisez votre propre classe d'encapsulation de base de données, vous pouvez encapsuler une méthode CheckWarnings () après chaque exécution () pour le gérer de manière centralisée.
Étiquettes associées:
mysqli