From:             [EMAIL PROTECTED]
Operating system: linux
PHP version:      4.0.5
PHP Bug Type:     ODBC related
Bug description:  unsufficient checking of odbc persistent connection validity

I'm using sybase adaptive server anywhere on linux as sql server and it disconnects 
clients after some client idle time. There is a check for persistent connection 
validity, but it does not work. if uses
SQLGetInfo(..., SQL_DATA_SOURCE_READ_ONLY, ...
but that does not verify the connnection, it returns ok everytime. Only few SQLGetInfo 
info types are connecting to server, like SQL_SERVER_NAME for example. I think this is 
server specific, so it would be good to have it as configurable parameter. Also, 
SQLGetInfo does not return error code if connection is not alive anymore, if only 
returns empty info data, so that should be checked too.

I made a small patch for my php to have it so, here it is (maybe it helps)
diff -urN php-4.0.5/ext/odbc/php_odbc.c php/ext/odbc/php_odbc.c
--- php-4.0.5/ext/odbc/php_odbc.c       Sat Mar 10 00:44:55 2001
+++ php/ext/odbc/php_odbc.c     Mon May  7 17:40:11 2001
@@ -309,6 +309,8 @@
                        defaultbinmode, php_odbc_globals, odbc_globals, display_
binmode)
        STD_PHP_INI_BOOLEAN("odbc.check_persistent", "1", PHP_INI_SYSTEM, OnUpda
teInt,
                check_persistent, php_odbc_globals, odbc_globals)
+       STD_PHP_INI_ENTRY("odbc.check_persistent_info_type", "25", PHP_INI_SYSTE
M, OnUpdateInt,
+               check_persistent_info_type, php_odbc_globals, odbc_globals)
 PHP_INI_END()
 
 #ifdef ZTS
@@ -2087,10 +2089,10 @@
                                SWORD len;
 
                                ret = SQLGetInfo(db_conn->hdbc, 
-                                       SQL_DATA_SOURCE_READ_ONLY, 
+                                       ODBCG(check_persistent_info_type),
                                        d_name, sizeof(d_name), &len);
 
-                               if(ret != SQL_SUCCESS){
+                               if(ret != SQL_SUCCESS || len == 0){
                                        zend_hash_del(&EG(persistent_list), hash
ed_details, hashed_len + 1);
                                        SQLDisconnect(db_conn->hdbc);
                                        SQLFreeConnect(db_conn->hdbc);
diff -urN php-4.0.5/ext/odbc/php_odbc.h php/ext/odbc/php_odbc.h
--- php-4.0.5/ext/odbc/php_odbc.h       Sat Mar 10 00:44:55 2001
+++ php/ext/odbc/php_odbc.h     Mon May  7 17:33:14 2001
@@ -283,6 +283,7 @@
        char *defPW;
        long allow_persistent;
        long check_persistent;
+       long check_persistent_info_type;
        long max_persistent;
        long max_links;
        long num_persistent;



-- 
Edit Bug report at: http://bugs.php.net/?id=10710&edit=1



-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to