Bug #61900 [Opn->Csd]: Cannot use PDO (dblib) and mssql_ (FreeTDS) in the same script
| From: | ssufficool@php.net | Date: | Sat, 01 Jun 2013 06:26:41 +0000 |
| Subject: | Bug #61900 [Opn->Csd]: Cannot use PDO (dblib) and mssql_ (FreeTDS) in the same script | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-179269@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=61900&edit=1
ID: 61900
Updated by: ssufficool@php.net
Reported by: stasismedia at gmail dot com
Summary: Cannot use PDO (dblib) and mssql_ (FreeTDS) in the
same script
-Status: Open
+Status: Closed
Type: Bug
Package: PDO related
Operating System: Ubuntu 12.04
PHP Version: 5.3.11
Block user comment: N
Private report: N
New Comment:
Automatic comment on behalf of ssufficool
Revision: http://git.php.net/?p=php-src.git;a=commit;h=317653e694c8cd3a3cc4c12c527af584726a66c7
Log: FIX BUG #61900
Previous Comments:
------------------------------------------------------------------------
[2012-05-02 12:28:17] stasismedia at gmail dot com
Description:
------------
When using PDO (dblib) and mssql_ (FreeTDS) in the same script, PDO will not
throw any Exceptions.
This is apparently due to the calls to 'dberrhandle' in the FreeTDS library:
https://github.com/php/php-src/blob/master/ext/mssql/php_mssql.c#L598
https://github.com/php/php-src/blob/master/ext/pdo_dblib/pdo_dblib.c#L205
Regardless of the order in the PHP Script, php_mssql is executed last, which
will replace any error handler function that pdo_dblib has set.
This also seems to be the case when 'forcing' the use of multiple connections.
Whilst using both functions is a silly thing to do, we are migrating a 9 year
old project over to PDO in a number of phases.
Test script:
---------------
<?php
/*
* Setup an MSSQL connection (FreeTDS library)
* It does not matter if this is executed before or after the PDO object is
* instantiated.
*/
$mssql = mssql_connect('server', 'user', 'pass');
$pdo = new PDO('dblib:host=server;dbname=db', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try
{
$pdo->query('INSERT INTO incorrecttable (abc) VALUES (123)');
echo "Exception not thrown\n";
}
catch(\PDOException $exception)
{
echo "Exception caught\n";
}
Expected result:
----------------
Exception caught
Actual result:
--------------
Warning: PDO::query(): message: Invalid object name 'incorrecttable'. (severity
16) in /tmp/php-test/pdotest.php on line 15
Call Stack:
0.0001 631912 1. {main}() /tmp/php-test/pdotest.php:0
0.0557 633632 2. PDO->query() /tmp/php-test/pdotest.php:15
Warning: PDO::query(): General SQL Server error: Check messages from the SQL
Server (severity 16) in /tmp/php-test/pdotest.php on line 15
Call Stack:
0.0001 631912 1. {main}() /tmp/php-test/pdotest.php:0
0.0557 633632 2. PDO->query() /tmp/php-test/pdotest.php:15
Exception not thrown
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=61900&edit=1