php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #49344 pdo_mssql fails to connect,throws PDOException SQLSTATE[] (null) (severity 0)
Submitted: 2009-08-24 10:06 UTC Modified: 2009-09-17 01:00 UTC
Votes:41
Avg. Score:4.9 ± 0.5
Reproduced:40 of 40 (100.0%)
Same Version:23 (57.5%)
Same OS:21 (52.5%)
From: rockyjl at gmai dot com Assigned: felipe (profile)
Status: No Feedback Package: PDO related
PHP Version: 5.2.11RC1 OS: win2003 X64
Private report: No CVE-ID: None
 [2009-08-24 10:06 UTC] rockyjl at gmai dot com
Description:
------------
in Bug #48539

[28 Jun 2:10am UTC] felipe@php.net 
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.

Fixed in 5.2 and HEAD.
5.3 in soon.

Thanks.

But the bug still often happen in PHP 5.2.11RC1 ...

Could you tell me which version(win32 zip) can work in the environment of win2003 x64 + apache 2.2.11 + sql2005,and the pdo_mssql can connect DB successfully ??

Reproduce code:
---------------
function db()
{
	try
	{
		$db = new PDO(DB_DSN, DB_User, DB_Password);
		return $db;
	}
	catch (PDOException $e)
	{
		die($e->getMessage());
	}
	
}

Expected result:
----------------
connect DB Successful


Actual result:
--------------
SQLSTATE[] (null) (severity 0)

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-08-25 02:08 UTC] rockyjl at gmail dot com
I upgrade to php-5.2.11RC2-dev-win32-VC6-x86 now !

Testing the bug ....
 [2009-08-27 08:27 UTC] rockyjl at gmail dot com
php-5.2.11RC2-dev-win32-VC6-x86 has the Bug too!

Anyone can help me ? Please !
 [2009-09-03 09:26 UTC] rockyjl at gmail dot com
web server is Apache 2.2.11 and Apache 2.2.13 x86 no_ssl
 [2009-09-08 09:37 UTC] Rockyjl at gmail dot com
Apache/2.2.13 (Win32) PHP/5.2.11RC3-dev

Error:
[2009-09-08 17:34:13]
127.0.0.1
ApacheBench/2.3
SQLSTATE[] (null) (severity 0)

Help !!! Who can help me ? please !
 [2009-09-08 11:33 UTC] felipe@php.net
Hi, Can you try this patch in 5.2.11-dev?

http://felipe.c2zlabs.com/diff/bug49344.diff
 [2009-09-09 07:16 UTC] Rockyjl at gmail dot com
I don't how to NMAKE source... Anyone can help me NMake the php_pdo_mssql.dll and php_pdo.dll with this

Index: ext/pdo_dblib/dblib_driver.c
===================================================================
--- ext/pdo_dblib/dblib_driver.c	(revisão 288156)
+++ ext/pdo_dblib/dblib_driver.c	(cópia de trabalho)
@@ -231,9 +231,7 @@
 	}
 
 #if PHP_DBLIB_IS_MSSQL
-	if (DBSETOPT(H->link, DBTEXTLIMIT, "2147483647") == FAIL) {
-		goto cleanup;
-	}
+	DBSETOPT(H->link, DBTEXTSIZE, "2147483647");
 #endif
 
 	if (vars[3].optval && FAIL == dbuse(H->link, vars[3].optval)) {

thank you so much !
 [2009-09-09 08:21 UTC] pajoye@php.net
Felipe, if you feel like your patch is correct, pls apply it. The next snap will have it.

Let me know if you prefer to provide a test DLL prior to commit. I can build one later today.
 [2009-09-09 09:43 UTC] Rockyjl at gmail dot com
Pajoye, Thank you so much! This is very important to me !
 [2009-09-10 01:20 UTC] svn@php.net
Automatic comment from SVN on behalf of felipe
Revision: http://svn.php.net/viewvc/?view=revision&revision=288215
Log: - Possible fix for bug #49344 on Windows (pdo_mssql fails to connect,throws PDOException SQLSTATE[] (null) (severity 0))
 [2009-09-10 06:07 UTC] Rockyjl at gmail dot com
PHP 5.3 (5.3.2-dev) VC6 x86 Thread Safe (2009-Sep-10 06:00:00)

http://windows.php.net/downloads/snaps/php-5.3-win32-VC6-x86-latest.zip

the bug happen too ....
 [2009-09-10 15:38 UTC] Rockyjl at gmail dot com
apache 2.2.13 + PHP 5.2 (5.2.11RC3-dev) VC6 x86 Thread Safe (2009-Sep-10 12:00:00)

often happen error:

[2009-09-10 23:30:10]
127.0.0.1

ApacheBench/2.3
SQLSTATE[] (null) (severity 0)

----------------

This patch cannot work ???!!!
 [2009-09-17 01:00 UTC] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
 [2009-09-23 04:20 UTC] Rockyjl at gmail dot com
My Modification:

static int pdo_dblib_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_DC)
{
	pdo_dblib_db_handle *H;
	int i, ret = 0;
	char *location = " L=";
	struct pdo_data_src_parser vars[] = {
		{ "charset",	NULL,	0 },
		{ "appname",	"PHP " PDO_DBLIB_FLAVOUR,	0 },
		{ "host",		"127.0.0.1", 0 },
		{ "dbname",		NULL,	0 },
		{ "secure",		NULL,	0 }, /* DBSETLSECURE */
		/* TODO: DBSETLVERSION ? */
	};

	php_pdo_parse_data_source(dbh->data_source, dbh->data_source_len, vars, 5);

	H = pecalloc(1, sizeof(*H), dbh->is_persistent);
	H->login = dblogin();
	H->err.sqlstate = dbh->error_code;

	if (!H->login) {
		strcat(location, "login");
		goto cleanup;
	}

	if (dbh->username) {
		DBSETLUSER(H->login, dbh->username);
	}
	if (dbh->password) {
		DBSETLPWD(H->login, dbh->password);
	}
	
#if !PHP_DBLIB_IS_MSSQL
	if (vars[0].optval) {
		DBSETLCHARSET(H->login, vars[0].optval);
	}
#endif

	DBSETLAPP(H->login, vars[1].optval);

#if PHP_DBLIB_IS_MSSQL
	dbprocerrhandle(H->login, (EHANDLEFUNC) error_handler);
	dbprocmsghandle(H->login, (MHANDLEFUNC) msg_handler);
#endif

	H->link = dbopen(H->login, vars[2].optval);

	if (H->link == NULL) {
		strcat(location, "link");
		goto cleanup;
	}

	/* dblib do not return more than this length from text/image */
	DBSETOPT(H->link, DBTEXTLIMIT, "2147483647");
	
	/* limit text/image from network */
	DBSETOPT(H->link, DBTEXTSIZE, "2147483647");

	if (vars[3].optval && FAIL == dbuse(H->link, vars[3].optval)) {
		strcat(location, "optval");
		goto cleanup;
	}

	ret = 1;
	dbh->max_escaped_char_length = 2;
	dbh->alloc_own_columns = 1;

cleanup:
	for (i = 0; i < sizeof(vars)/sizeof(vars[0]); i++) {
		if (vars[i].freeme) {
			efree(vars[i].optval);
		}
	}

	dbh->methods = &dblib_methods;
	dbh->driver_data = H;

	if (!ret) {
		zend_throw_exception_ex(php_pdo_get_exception(), 0 TSRMLS_CC,
			"SQLSTATE[%s] %s (severity %d) %s",  //I want to findout the bug location !
			DBLIB_G(err).sqlstate,
			DBLIB_G(err).dberrstr,
			DBLIB_G(err).severity,
			location);
	}

	return ret;
}

The PDO MSSQL work is correct, the bug never happen and never throws any PDOException after Complie php_pdo_mssql.dll ...

I think my modification STOP all PDOException throw ...

Anyone can tell me what is the problem ?
 [2009-10-07 09:14 UTC] philipp at servicemail24 dot de
The same error occurs using Ubuntu 0910 with Zend Framework:

    require_once('Zend/Db.php');

    $db = Zend_Db::factory('Pdo_Mssql', array(
      'host'     => 'sqlsrv',
      'username' => 'php',
      'password' => 'secret',
      'dbname'   => 'myDatabase',
      'pdoType'  => 'dblib'
    ));
    $result = $db->fetchAll(SELECT * FROM MyTable");
    var_dump($result);


Zend_Db_Adapter_Exception: SQLSTATE[] (null) (severity 0) in /usr/share/php/libzend-framework-php/Zend/Db/Adapter/Pdo/Abstract.php on line 144
 [2009-10-09 18:56 UTC] svn@php.net
Automatic comment from SVN on behalf of pajoye
Revision: http://svn.php.net/viewvc/?view=revision&revision=289440
Log: -  Possible fix for bug #49344 on Windows (pdo_mssql fails to connect,throws PDOException SQLSTATE[] (null) (severity 0))
 [2011-01-06 12:11 UTC] wrobel at wsb-nlu dot edu dot pl
I have the same problem when connecting: PDOException with message SQLSTATE[] (null) (severity 0).

My environment is:
PHP 5.2.14
apache-2.2.16
Sql Server 2008 Express (and Sql Server 2008 R2)
Linux/PLD
 [2011-01-07 09:37 UTC] wrobel at wsb-nlu dot edu dot pl
It seems that the problem is solved by changing tds version to 7.0 instead of 8.0 in freetds configuration...
 [2011-04-11 18:47 UTC] tom at punkave dot com
Still experiencing this error. Tweaking freetds.conf:


[global]
        # TDS protocol version
# Microsoft compatible we hope
tds version = 7.0


Had no effect.

PHP 5.3.5 (cli) (built: Jan 27 2011 11:42:56)  on macports.
 [2011-04-11 20:44 UTC] tom at punkave dot com
Works with the command line tsql tool even though it does not work with command 
line PHP. Both using the FreeTDS that was installed on PHP's behalf.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Nov 24 14:01:32 2024 UTC