Lorsque vous utilisez PHP pour les opérations de base de données, l'extension MySQLI fournit des fonctionnalités pour l'exécution de la requête. Avec une connexion de base de données, nous pouvons exécuter plusieurs requêtes SQL, mais si vous exécutez plusieurs requêtes, vous pouvez rencontrer un problème - MySQLI :: $ Errno sera-t-il écrasé? En d'autres termes, lorsque plusieurs requêtes partagent une connexion, comment obtenez-vous correctement le code d'erreur pour chaque fois?
Dans cet article, nous discuterons de la question de savoir si mysqli :: $ errno sera écrasé et donnera une solution à la façon d'obtenir le code d'erreur correctement entre plusieurs requêtes.
mysqli :: $ errno est une propriété de la classe mysqli qui renvoie le code d'erreur de la dernière requête. Le code d'erreur est un nombre qui indique l'état de l'opération actuelle. Si la valeur est 0, aucune erreur ne s'est produite.
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
$query = "SELECT * FROM non_existent_table";
$mysqli->query($query);
echo "Code d'erreur: " . $mysqli->errno;
?>
Dans le code ci-dessus, $ mysqli-> errno renvoie le code d'erreur pour la dernière requête.
Si vous exécutez plusieurs requêtes sur la même connexion, MySQLI :: $ Errno sera mis à jour vers un nouveau code d'erreur après chaque requête. Donc, si vous appelez $ mysqli-> errno après une requête, puis exécutez la question suivante, $ mysqli-> errno sera écrasé par le nouveau code d'erreur.
Par exemple:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
$query1 = "SELECT * FROM non_existent_table";
$query2 = "SELECT * FROM another_non_existent_table";
$mysqli->query($query1);
echo "第一个查询Code d'erreur: " . $mysqli->errno . "<br>";
$mysqli->query($query2);
echo "第二个查询Code d'erreur: " . $mysqli->errno . "<br>";
?>
Lors de l'exécution du code ci-dessus, $ mysqli-> Errno renvoie le premier code d'erreur après l'exécution de la première requête, mais lors de l'exécution de la deuxième requête, elle sera écrasée par le nouveau code d'erreur. Par conséquent, vous ne pouvez voir le code d'erreur que pour la dernière requête, et vous ne pouvez pas obtenir directement le code d'erreur pour chaque requête.
Afin d'obtenir correctement le code d'erreur pour chaque requête, vous pouvez enregistrer manuellement le code d'erreur actuel après l'exécution de chaque requête. Une variable peut être utilisée pour enregistrer le code d'erreur pour chaque requête, évitant ainsi le problème d'être écrasé.
Voici le code amélioré:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
$query1 = "SELECT * FROM non_existent_table";
$query2 = "SELECT * FROM another_non_existent_table";
// Exécuter la première requête
$mysqli->query($query1);
$error_code1 = $mysqli->errno; // 保存第一个查询的Code d'erreur
echo "第一个查询Code d'erreur: " . $error_code1 . "<br>";
// Exécuter la deuxième requête
$mysqli->query($query2);
$error_code2 = $mysqli->errno; // 保存第二个查询的Code d'erreur
echo "第二个查询Code d'erreur: " . $error_code2 . "<br>";
?>
Dans cet exemple, nous utilisons $ error_code1 et $ error_code2 pour enregistrer le code d'erreur pour chaque requête, respectivement. De cette façon, le code d'erreur de chaque requête ne sera pas écrasé, mais sera enregistré séparément.
En utilisant différentes variables pour enregistrer le code d'erreur pour chaque requête, vous pouvez vous assurer que même si plusieurs requêtes partagent une connexion, le code d'erreur ne sera pas écrasé. Cette approche évite la mauvaise opération et la perte de données, permettant un débogage et une gestion plus précis des erreurs de requête.
J'espère que cet article peut vous aider à mieux comprendre l'utilisation de mysqli :: $ errno et fournir une solution qui vous permet d'obtenir correctement le code d'erreur pour chaque requête.