Questo suona come una condizione di razza di qualche tipo. Stai utilizzando MyISAM, quindi è possibile che un aggiornamento venga posticipato (soprattutto se c'è molto traffico su quel tavolo).
Il true
return indica che il tuo select
query completata correttamente ma restituita e set di risultati vuoto (nessuna riga). Se la tua logica quando ciò accade è aspettare, diciamo, 50 millisecondi e riprovare, potresti scoprire che le cose funzionano correttamente.
Modifica :potresti provare a bloccare la tabella prima di eseguire l'AGGIORNAMENTO fino a quando non hai eseguito l'ultimo SELECT. Ma ciò potrebbe compromettere le prestazioni di altre parti della tua app. La cosa migliore da fare è rendere la tua app robusta di fronte alle condizioni di gara.