仮想メモリのメモリにのっからないならmysqlとかhddに投げるまでです。
SQL が明示されていませんが COUNT 関数を使えば良いと思います。
$sql = "SELECT COUNT(*) FROM xxx"; $res = $conn->query($sql); $count = $res->fetchColumn();
参考:
http://php.net/manual/ja/pdostatement.rowcount.php#example-1009
大量のデータを一度に取得しようとするので、エラーになってしまいます。
そこで、SQLに、LIMIT と OFFSET 入れて、少しずつデータを取得して、処理が完了したら、続きを読むようにしましょう。