Есть некотрое простейшее апи - запрос по POST -> PHP ищет в базе данных строку и выводит её. Все работает в 99% нормально, но иногда проскакивает выдача другой строки, не с таким полем, по которому ищем. Поле не уникальное, не ключ, но оно точно не повторяется.
Нагрузка есть, но не такая уж большая - может пара запросов в минуты, в таблицу одновременно максимум пара тысяч строк.
Может быть так, что сама база подглючивает у хостера? Или подскажите, как отловить неисправность?
Сама MySQL так не глючит. Но если есть какая-то схема балансировки - то запрос может прыгать между master-slaves и в описанной ситуации есть признкаки такого рандомного переключения.
Как фиксить. Я думаю никак. Надо просто собирать логи и отправлять хостеру запрос на техподдержку.
А кодировки везде правильные? Если при подключении клиент сообщает, что у него одна кодировка, а по факту данные передаёт при этом в другой, то подобная путаница тоже может происходить.
Все работает в 99% нормально, но иногда проскакивает выдача другой строки, не с таким полем, по которому ищем.
Это просто значит 99% проблема в коде. Логируйте в файл запрос, параметры и результат выполнения, скорее всего логика работает не так как вы задумали. Как только словите ошибку - смотрите свой лог, наверняка запрос будет отличаться от ожидаемого.
Я бы сам дал такой же совет. Но там обычный селект и просто пользователю неоткуда взять другое значение, он не может угадать его. А он берет (это точно, они не могут угадать) - значит именно запрос ему вернул (тот единственный селект) неверное значение.
А вот насчет записи запросов - спасибо. Не догадался.
Я встречал смутно похожие проблемы (когда буквально where like %zzz% выдавал строки в которых не было 'zzz' когда скорее всего из-за ранее повисшей машины была некорректно перезагружена операционная система и были порушены данные в индексах, repair и пересоздание индекса для гарантии проблему решили.
Не факт что это твой случае, ты бы хотя бы примеры данных и примеры запроса сюда показал, а то бывает люди надеются на то что порядок в не сортированных данных (или сортировка по не уникальному полю) будет постоянным, а это undefined behavior, именно так это и вылезает в редких неуловимых местах.