не выдает исключений при ошибке, возможно, это упущение в драйвере SQLSRV.

чать Метод возвращает false как в случае, если набор записей пуст, так и в случае фактической ошибки. Метод, описанный здесь, позволяет легко распознать происходящее:убедитесь, что результат метода извлечения PDO "false" является ошибкой или пустым результатом

Он хорошо работает с pdo_mysql, однако pdo_sqlsrv выдает ошибку, даже если набор записей пуст. Это предполагаемое поведение? Можно ли избежать этих ошибок?

РЕДАКТИРОВАТЬ: ошибка «Нет больше строк в активном наборе результатов», и это происходит, когда вы пытаетесь получить набор записей, который уже полностью извлечен. Этого не происходит с pdo_mysql, который просто возвращает false.

РЕДАКТИРОВАТЬ 2: Я наконец понял проблему более подробно:

первый раз вы получаете пустой набор записей, вы получаете ЛОЖЬ, затем, если вы выбираете снова, вы получаете ошибку. Этого не происходит с pdo_mysql (и я почти уверен, что с PDO pgsql и sqlite этого не происходит): вы все равно получаете false, не вызывая ошибок.Вот упрощенная версия кода:

ВЫХОД:

// 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();
    }
}

Вы установили

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.

Ответы на вопрос(0)

Ваш ответ на вопрос