pdo_sqlsrv: como reconhecer se a busca "false" é um erro ou um conjunto de registros vazio?

Obusca método @ retorna false se o conjunto de registros estiver vazio e se houver um erro real. O método descrito aqui permite que você reconheça facilmente o que está acontecendo:

garantir que o resultado do método de busca DOP "false" seja um erro ou um resultado vazio

Funciona bem com pdo_mysql, no entanto, pdo_sqlsrv gera um erro mesmo quando o conjunto de registros está vazio. Esse é o comportamento pretendido? É possível evitar esses erros?

EDIT: o erro é "Não há mais linhas no conjunto de resultados ativo" e é produzido quando você tenta buscar um conjunto de registros que já foi completamente buscado. Isso não acontece com o pdo_mysql, que retorna apenas false.

EDIT 2: Finalmente entendi o problema mais detalhadamente: oprimeira ve você busca um conjunto de registros vazio e obtém FALSE; se você buscar novamente, recebe um erro. Isso não acontece com o pdo_mysql (e tenho certeza de que isso também não acontece com o PDO pgsql e sqlite): você ainda fica falso sem gerar erro

qui está uma versão simplificada do códig

// sqlsrv connection
$conn = new PDO("sqlsrv:Server=....;Database=....", "user", "password", array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ));

// mysql connection
// $conn = new PDO('mysql:host=....;dbname=....', 'user', 'password', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

$sql = "drop table if exists test;";
$res = $conn->query($sql);

$sql = "create table test (name varchar(10));";
$res = $conn->query($sql);

$sql = "insert into test (name) values ('Alice');";
$res = $conn->query($sql);

$sql = "select * from test";
$res = $conn->query($sql);

// fetch first record
$row = fetch_row_db($res);
var_dump($row);

// fetch again
$row = fetch_row_db($res);
var_dump($row);

// fetch again
$row = fetch_row_db($res);
var_dump($row);

function fetch_row_db(&$res)
{
    try {
        return $res->fetch();
    }
    catch(PDOException $e){
        echo 'Error during record fetching.';
        exit();
    }
}

SAÍDA

MySQL
array(2) { ["name"]=> string(5) "Alice" [0]=> string(5) "Alice" } bool(false) bool(false)

sqlsrv
array(2) { ["name"]=> string(5) "Alice" [0]=> string(5) "Alice" } bool(false) Error during record fetching.

questionAnswers(0)

yourAnswerToTheQuestion