@Prescott

PDO_MySQL: можно ли узнать наличие записей в result set'е без сдвига курсора?

Добрый день,
имеется огромное приложение на php, использующее устаревшие функции mysql_* для доступа к БД. Все это добро было решено перевести на pdo_mysql. Все функции работы с БД были успешно переписаны за пару дней на PDO'шные путем замены имен функций регулярными выражениями по проекту (ORM использовалась лишь частично, в погоне за ресурсами).

Вопрос встал только на функции mysql_num_rows. Я понимаю, что без fetchAll в pdo_mysql не получить количество срок, по-этому было решено разделить все вхождения mysql_num_rows на два типа:
1) те, которые действительно считали строки - это требуется и использовалось не часто, по-этому было благополучно за полдня переписано вручную на fetchAll + foreach
2) те, которые проверяли, есть ли строки в результирующем наборе (таких несколько сотен).

Для второго варианта, согласно документации функции PDOStatement::columnCount, была написана функция rs_isEmpty($rs), так как columnCount должна возвращать 0, если резалт сэт пустой. Однако, это не так: https://bugs.php.net/bug.php?id=66613 (репорт мой)

Других способов узнать, есть ли в резалт сэте строки, в документации я не нашел. Я уже согласен сделать fetch первой строки, но в таком случае курсор сдвигается и способа его вернуть в позицию 0 я тоже не нашел (что кажется мне весьма удивительным). Очень надеюсь на вашу помощь, спасибо.
  • Вопрос задан
  • 2884 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Вы строки и столбцы не различаете?
ru2.php.net/manual/en/pdostatement.rowcount.php
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Prescott Автор вопроса
А вы документацию читаете? Для select запросов не работает.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Ерунда какая-то.

те, которые действительно считали строки - это требуется и использовалось не часто, по-этому было благополучно за полдня переписано вручную на fetchAll + foreach

Какое отношение к подсчету строк имеет foreach? count наверное имелся в виду?

те, которые проверяли, есть ли строки в результирующем наборе (таких несколько сотен).

а здесь как раз нужен fetchAll + foreach и проверка сведется к проверке результата fetchall.

все вхождения mysql_num_rows

Таких вхождений должно быть в среднем ноль на веб-приложение.
Если же они есть, то приложение написано криво, а функция используется не по назначению.

А вы документацию читаете? Для select запросов не работает.


Обновить документацию не пробовали? с 2004 года она могла немного поменяться. На худой конец можно попробовать и посмотреть самому. Это не так сложно, как кажется.

ЗЫ: Я очень надеюсь, что речь идёт о подсчёте именно в резалтсете, а не в базе.
ЗЗЫ:

Все функции работы с БД были успешно переписаны за пару дней на PDO'шные путем замены имен функций регулярными выражениями по проекту

- т.е., была проделана абсолютно бессмысленная, никому не нужная и совершенно бесполезная работа.
Ответ написан
Комментировать
@Prescott Автор вопроса
Обновить документацию не пробовали? с 2004 года она могла немного поменяться. На худой конец можно попробовать и посмотреть самому. Это не так сложно, как кажется.

Я пробовал, причем не на самых старых версиях - не работало. Сейчас действительно работает, вопрос решен.

- т.е., была проделана абсолютно бессмысленная, никому не нужная и совершенно бесполезная работа.

ок
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы