Simple question: Can't find any way to actually close (or reconnect) a persistent odbc connection. Problem is that the Oracle database here sometimes goes down and the persistent connection from php ends up in nowhere. Only solution is to restart Apache, which (in my opinion) is not a good solution.
Any inactivity time out settings on the database server side would render useless, since the database is not aware of this connection any longer.
Is there maybe some setting in the ODBC client or in php.ini that I have missed?
Any suggestions very much appreciated...
odbc_pconnect
(PHP 4, PHP 5)
odbc_pconnect — 持続的なデータベース接続を開く
説明
resource odbc_pconnect
( string $dsn
, string $user
, string $password
[, int $cursor_type
] )
持続的なデータベース接続を開きます。
この関数は odbc_connect() に非常に似ていますが、 スクリプトが終了した時に接続が閉じられないという点が異なります。 同じ dsn 、user 、 password の組み合わせ (odbc_connect() および odbc_pconnect() による)接続の場合は、 持続的な接続を再利用することが可能です。
パラメータ
詳細は odbc_connect() を参照ください。
返り値
ODBC 接続 ID またはエラー時に 0 (FALSE) を返します。
注意
注意: 持続的な接続は、PHP を CGI プログラムとして使用する場合には使用できません。
odbc_pconnect
Tony
04-Jun-2008 07:28
04-Jun-2008 07:28
alberici at to dot infn dot it
15-Jul-2002 07:42
15-Jul-2002 07:42
I saw that closing an ODBC persistent connection opened with odbc_pconnect() with odbc_close() doesnt work. Someone here have proposed using odbc_close_all() but wouldnt that close all persistent connections (also others ones !!!) ? What about catching a persistent handle with odbc_connect() and then closing the connection with odbc_close() ? If there are no available handles (for some reason the last pconn has been closed) this approach opens and close a normal single-script connection. Waiting comments...
j_schrab at execpc dot com
17-Jan-2001 01:41
17-Jan-2001 01:41
Ok, learning time. As I was told by the PHP-DevTeam...
Multiple connections are supported, but when you try to connect with exactly the same parameters, an existing
connection will be reused, leading to the behaviour you see.
You can simply omit the calls to odbc_close() since
connections get closed on script termination anyway or better:
Consider making your connection id a global variable or pass
it to your functions.
wls at wwco dot com
11-Aug-2000 10:44
11-Aug-2000 10:44
I found that using odbc_close($odbchandle) on a connection opened by odbc_pconnect() causes a warning "not a valid ODBC-Link resource". So you can't just change odbc_connect() to odbc_pconnect() and expect things to work without warning messages. However, you can use odbc_close_all() and not get a warning.
etsai at email dot com
29-Jun-2000 12:10
29-Jun-2000 12:10
The following constants are defined for cursortype:
- SQL_CUR_USE_IF_NEEDED
- SQL_CUR_USE_ODBC
- SQL_CUR_USE_DRIVER
- SQL_CUR_DEFAULT
With some ODBC drivers, executing a complex stored procedure may fail with an error similar to: "Cannot open a cursor on a stored procedure that has anything other than a single select statement in it". Using SQL_CUR_USE_ODBC may avoid that error. Also, some drivers don't support the optional row_number parameter in odbc_fetch_row(). SQL_CUR_USE_ODBC might help in that case, too.
