PHP, MySQL и FOUND_ROWS() bug

Рубрика: Development, MySQL | 5 June 2008, 11:53 | Vadim Voituk

“Словил” сегодня пренеприятнейший баг, который стоил мне более часа потерянного времени.

Выполняем в консольном mysql-клиенте такой запрос:
SELECT SQL_CALC_FOUND_ROWS FROM tablename LIMIT 5;

Получем resultset из 5ти результатов (предполагается, что в таблице tablename больше 5ти записей)

Теперь в этом же соединении выполняем:
SELECT FOUND_ROWS();
Получаем значение, равное количеству строк в tablename – ничего сверхъестественного, все как и ожидалось.

Самое интересное начинается если повторить выполнить эти SQL-запросы из PHP-скрипта (при определенных условиях, но о оних ниже) – второй запрос будет всегда возвращать 0.

Причиной всему – ошибка в модуле php_mysql.so (BUG#33021), которая наблюдается при включенной опции
mysql.trace_mode=true

Дабы не поулчить подобную неприятность в своих проектах рекомендую пока установить mysql.trace_mode в false.

При тестировании использовался PHP 5.2.1 и с модулем mysql client API 5.1.16-beta.

Комментариев: 3

3 Responses to “PHP, MySQL и FOUND_ROWS() bug”

Комментарии:

  1. Snowcore

    Вот это так грабли! Будем знать, спасибо!

  2. Павел

    Спасибо!
    3 часа убил ….

  3. Overdose

    огромное спасибо. Пол дня промучался… искал как выяснилось несуществующую ошибку в своей программе. Башку всю переломал, т.к. написано было всё правильно… Так бы наверное и мучался если бы не Вы.

Leave a Reply