Cela ressemble à une condition de course en quelque sorte. Vous utilisez MyISAM, il est donc possible qu'une mise à jour soit différée (surtout s'il y a beaucoup de trafic sur cette table).
Le true
return indique que votre select
la requête s'est terminée correctement mais a renvoyé un jeu de résultats vide (pas de lignes). Si votre logique lorsque cela se produit est d'attendre, disons, 50 millisecondes, et de réessayer, vous constaterez peut-être que tout fonctionne correctement.
Modifier :Vous pouvez essayer de verrouiller la table avant de faire la mise à jour jusqu'à ce que vous ayez fait le dernier SELECT. Mais cela pourrait nuire aux performances d'autres parties de votre application. La meilleure chose à faire est de rendre votre application robuste face aux conditions de concurrence.