获取SQL Server表中的行数

I have a problem with getting the right value after I counted the rows from a table. I searched on the web but didn't find an answer.

In the database i have a table with all the categories in it they all have an id, and i would like to count using this column.

I have this PHP code, it works but is there an other and better to get over this?

    $sql2 = "SELECT COUNT(id) FROM categories";
    $stmt2 = sqlsrv_query($conn, $sql2);
    $res = sqlsrv_fetch_array($stmt2, SQLSRV_FETCH_ASSOC);
    foreach($res as $row)
    {
        $rows = $row;
    }

    //if there are categories display them otherwise don't
    if ($rows > 0)
    {
        $sql = "SELECT * FROM categories";
        $stmt = sqlsrv_query($conn, $sql);

        while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
            echo "<a href='#' class='cat_links'>" . $row['category_name'] . "  - <font size='-1'>" . $row['category_description'] . "</font></a>";
        }
    }
    else
    {
        echo "<p style='text-align: center'>No categories yet.</p>";
    }

I think has to be a better way to convert the $stmt2 variable from a SQL resource to an actual number, or to convert the $res variable from an array to an number. If I try to echo the whole array using foreach, it will only print out the number of rows. This is why I use it to count the rows now.

I can't use the sqlsrv_num_rows function because I then get an error, or no answer.