Position actuelle: Accueil> Derniers articles> Que signifie la fonction -1 de la fonction -1? Plusieurs situations que vous devez connaître

Que signifie la fonction -1 de la fonction -1? Plusieurs situations que vous devez connaître

gitbox 2025-06-09

Dans PHP, lorsque vous utilisez une extension MySQLI pour faire fonctionner une base de données, $ mysqli-> affecté_rows est une propriété très courante qui peut vous dire combien de lignes l'instruction SQL a affecté la dernière exécutée. Cependant, parfois nous rencontrons une situation où $ mysqli-> affecte_rows renvoie -1 . Qu'est-ce que cela signifie? Cet article vous amènera à analyser plusieurs situations communes qui provoquent le retour -1 en détail, vous aidant à mieux comprendre et résoudre les problèmes de code.


Qu'est-ce que MySqli :: $ affecte_rows

MySQLI :: $ affecte_rows renvoie le nombre de lignes affectées par les instructions d'insert, de mise à jour et de suppression exécutées la dernière fois. Par exemple:

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$mysqli->query("UPDATE users SET active = 1 WHERE id = 10");
echo $mysqli->affected_rows; // Sortie le nombre de lignes affectées
?>

Si cette instruction de mise à jour est exécutée avec succès, $ affecte_rows renvoie un entier non négatif indiquant le nombre réel de lignes modifiées. Cependant, lorsqu'une erreur se produit ou certaines circonstances particulières, la valeur de retour peut être -1 .


Plusieurs situations dans lesquelles MySqli :: $ affecte_rows renvoie -1

1. L'exécution de l'instruction SQL a échoué

Si votre instruction SQL ne parvient pas à s'exécuter, telles que les erreurs de syntaxe, la table n'existe pas, etc., $ affecte_rows renvoie -1 . À l'heure actuelle, vous devez vérifier le message d'erreur pour déterminer:

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$result = $mysqli->query("UPDATE non_existing_table SET active=1");

if ($result === false) {
    echo "La requête a échoué,message d&#39;erreur:" . $mysqli->error;
    echo "Nombre de lignes affectées:" . $mysqli->affected_rows; // Ici, sera sorti -1
}
?>

2. Exécutez une requête qui n'affecte pas le nombre de lignes

$ affecté_rows est uniquement significatif pour modifier les opérations de classe (insérer, mettre à jour, supprimer). Si vous exécutez Sélectionnez, affichez ou d'autres requêtes qui ne modifient pas les données, $ affecte_rows renvoie -1 .

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$mysqli->query("SELECT * FROM users");
echo $mysqli->affected_rows; // Sortir -1,parce queSELECTN&#39;affecte pas le nombre de lignes
?>

3. Transaction non engagée ou valide automatique fermée

Si vous utilisez une transaction, effectuez une modification mais ne vous engagez pas, $ affecte_rows peut renvoyer une valeur aberrante. Assurez-vous que la transaction a été soumise correctement.

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$mysqli->autocommit(false);
$mysqli->query("UPDATE users SET active=1 WHERE id=5");

echo $mysqli->affected_rows; // Il peut encore montrer correctement
$mysqli->commit();
?>

Les transactions non engagées peuvent entraîner des défaillances réelles, et bien que les tours concernés reviennent généralement correctement, ils peuvent être trompeurs dans des cas particuliers.

4. Utilisation incorrecte des déclarations de prétraitement

Lorsqu'il est exécuté avec une instruction de prétraitement, dans certains cas, $ stmt-> affecte_rows peut être -1 , par exemple, une instruction qui ne prend pas en charge le rendement du nombre de lignes est exécutée, ou une requête échoue.

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$stmt = $mysqli->prepare("UPDATE users SET active=1 WHERE id=?");
$id = 10;
$stmt->bind_param("i", $id);
$stmt->execute();

echo $stmt->affected_rows; // Probablement-1,Indique une exception d&#39;exécution
?>

Assurez-vous de vérifier $ stmt-> Erreur pour confirmer s'il y a une erreur.


Comment gérer correctement la situation où -1 est retourné?

  1. Vérifiez si l'exécution de SQL réussit <br> En déterminant si la valeur de retour est fausse et en appelant $ mysqli-> erreur pour obtenir des informations d'erreur détaillées.

  2. Confirmer le type d'instruction SQL
    affecté_rows est uniquement valable pour les opérations de modification, et l'instruction de requête renvoie toujours -1.

  3. Vérifier l'état de la transaction <br> Assurez-vous que la transaction qui modifie l'opération a été soumise.

  4. Faire des jugements erronés sur les déclarations de prétraitement <br> Vérifiez si $ stmt-> execute () réussit et gérez l'erreur dans le temps.


résumé

  • MySqli :: $ affecte_rows renvoie -1 , ce qui signifie généralement que l'exécution SQL la plus récente a échoué ou l'exécution d'une instruction qui n'affecte pas le nombre de lignes.

  • Lorsque vous l'utilisez, vous devez combiner des informations d'erreur et des types de relevés SQL pour porter des jugements.

  • Lors de l'écriture de code, le développement de l'habitude de vérifier $ mysqli-> erreur ou $ stmt-> error peut aider à localiser rapidement les problèmes.

Grâce aux méthodes ci-dessus, vous pouvez mieux comprendre et gérer avec précision la situation où MySqli :: $ affecte_rows renvoie -1 , améliorant la robustesse du code et l'efficacité de débogage.

  • Étiquettes associées:

    mysqli