Isso soa como uma condição de corrida de algum tipo. Você está usando o MyISAM, então é possível que uma atualização seja adiada (especialmente se houver muito tráfego nessa tabela).
O
true
return indica que seu select
consulta concluída corretamente, mas retornou e conjunto de resultados vazio (sem linhas). Se sua lógica quando isso acontecer for esperar, digamos, 50 milissegundos e tentar novamente, você poderá descobrir que as coisas funcionam corretamente. Editar :Você pode tentar bloquear a tabela antes de fazer o UPDATE até ter feito o último SELECT. Mas isso pode prejudicar o desempenho de outras partes do seu aplicativo. A melhor coisa a fazer é tornar seu aplicativo robusto diante das condições de corrida.