Mysql
 sql >> Base de données >  >> RDS >> Mysql

Différencier 'aucune ligne n'a été affectée' et les lignes mises à jour avec succès - à la même valeur (MySQL et PHP)

Une solution simple consisterait en deux requêtes.

Tout d'abord, exécutez une requête SELECT pour vérifier si la ligne existe à l'aide de mysqli_num_rows().

Ensuite, si la ligne existe, vous pouvez exécuter la requête UPDATE et utiliser mysqli_affected_rows().

[MODIFIER]

... Je proposerai une alternative potentielle à tous ceux qui recherchent un seul appel. Je ne sais pas si vous êtes intéressé à faire des INSERTS, ou purement des UPDATE. Voici quelques pistes de réflexion :

Du haut commentaire @ http://php.net/manual/en/ mysqli.affected-rows.php :

Sur les requêtes "INSERT INTO ON DUPLICATE KEY UPDATE", bien que l'on puisse s'attendre à ce qu'affected_rows ne renvoie que 0 ou 1 par ligne sur les requêtes réussies, il peut en fait renvoyer 2.

Du manuel Mysql :"Avec ON DUPLICATE KEY UPDATE, la valeur des lignes affectées par ligne est 1 si la ligne est insérée en tant que nouvelle ligne et 2 si une ligne existante est mise à jour."

Voir :http://dev.mysql.com /doc/refman/5.0/en/insert-on-duplicate.html

Voici la répartition de la somme par ligne :

+0 :une ligne n'a pas été mise à jour ou insérée (probablement parce que la ligne existait déjà, mais aucune valeur de champ n'a été modifiée lors de la mise à jour)

+1 :une ligne a été insérée

+2 :une ligne a été mise à jour

Pouvez-vous l'adapter à vos besoins ?