Обходное решение для PHP5 PDO rowCount MySQL проблема

StackOverflow https://stackoverflow.com/questions/460010

  •  19-08-2019
  •  | 
  •  

Вопрос

Недавно я начал работу над новым проектом с использованием PHP5 и хочу использовать для этого свои классы PDO. Проблема в том, что MySQL PDO Driver не поддерживает rowCount (), поэтому нет способа выполнить запрос, а затем получить количество затронутых строк или возвращенных строк, что, на мой взгляд, довольно большая проблема. Мне было интересно, если кто-то еще имел дело с этим раньше и что вы сделали, чтобы обойти это. Необходимость выполнения fetch () или fetchAll () для проверки того, были ли затронуты или возвращены какие-либо строки, кажется мне взломом, я бы просто сделал $ stmt - & Gt; numRows () или что-то подобное.

Это было полезно?

Решение

Вы можете выполнить запрос SELECT FOUND_ROWS() сразу после исходного запроса SELECT, чтобы получить количество строк.

$pdo->query("SELECT * FROM users");
$foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();

См. также: Документы MySQL на FOUND_ROWS ( )

Другие советы

Для тех из вас, кто использует хранимые процедуры MySQL, это решение на самом деле неосуществимо. Я бы предложил, чтобы ваша хранимая процедура создала два набора строк. Первый будет содержать одну строку и один столбец, содержащий количество записей. Вторым будет набор записей, который вы будете использовать для извлечения этого количества строк.

Число неограниченных строк может быть SELECT COUNT(*) с тем же предложением WHERE, что и второй набор строк без предложений LIMIT / OFFSET.

Другой идеей может быть создание временной таблицы. Используйте оператор SELECT для заполнения временной таблицы. Затем вы можете использовать SELECT COUNT(*) FROM tmpTable для первого набора строк и SELECT * FROM tmpTable для второго.

Этот вопрос основан на нескольких ложных предположениях и одном устаревшем утверждении.

Прежде всего, не путайте количество затронутых и выбранных строк. PDO поддерживал первый даже в '09.

Говоря о количестве строк, возвращаемых оператором SELECT - вам просто не нужно это число. У вас достаточно данных.

И да, в настоящее время rowCount() также поддерживает количество строк, выбранных из mysql. Но опять же - вам не нужно это число в среднем веб-приложении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top