PDO: setAttribute() не влияет на dblib и SQL Server

Я подключаюсь к базе данных SQL Server (SQL Server 2008 R2 SP2 x64) с Linux-сервера с PHP 5.3.19, используя следующие строки:

$this->dbLink = new PDO(
    'dblib:host='.$this->host.';dbname='.$this->database,
    $this->user,
    $this->password,
    array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    )
);

Соединение работает отлично, за исключением того, что ATTR_ERRMODE работает как ERRMODE_WARNING, независимо от того, что я делаю.

Я попытался установить его с помощью $this->dbLink->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); прямо перед вызовом запроса, но он не имеет никакого эффекта.

Если я использую getAttribute(), я могу подтвердить, что PDO:: ATTR_ERRMODE действительно установлен в значение int(2) (ERRMODE_EXCEPTION), но я все еще получаю предупреждения, а PHP продолжает прерываться с явно неправильными запросами.

Ответ 1

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

http://www.php.net/manual/en/ref.pdo-dblib.php

Если вы можете, вместо этого вы должны использовать PDO_SQLSRV:

http://www.php.net/manual/en/ref.pdo-sqlsrv.php

Просто измените настройку соединения с dblib: на префикс dos PDO_SQLSRV dns sqlsrv:

http://www.php.net/manual/en/ref.pdo-sqlsrv.connection.php

Сообщите мне, если это сработает для вас