[freetds] Multiple Active Statements
Daniel Fazekas
fdsubs at axelero.hu
Wed Sep 24 16:33:21 EDT 2003
Dario wrote:
> ok, but if I open multiple connections
> the problem persist! how can I solve this?
> thanks
> Dario
I guess that's because you are not actually opening multiple connections.
PHP has this not always convenient feature in that it caches the
database connection parameters, and if you try to open the same database
using the exact same parameters (host, login and password), instead of
opening a new link, it will just return the previously opened
connection's handle.
This is useful for programmers who are lazy about passing the connection
handle from one part of their code to another, and might help not to go
over the max simultaneous connection limit of the database server.
However, checking odbc_connect()'s documentation in the PHP Manual does
not note this feature's existence or a way of turning it off.
On the other hand, the most often used mysql_connect() has this:
"If a second call is made to mysql_connect() with the same arguments, no
new link will be established, but instead, the link identifier of the
already opened link will be returned. The new_link parameter modifies
this behavior and makes mysql_connect() always open a new link, even if
mysql_connect() was called before with the same parameters."
So that one lets you control this behavior which is turned on by default.
Almost the same is true of mssql_connect():
"In case a second call is made to mssql_connect() with the same
arguments, no new link will be established, but instead, the link
identifier of the already opened link will be returned."
But, unfortunately, here you have no way of turning this off.
odbc_pconnect() also notes this:
"Future requests for a connection with the same dsn, user, password
combination (via odbc_connect() and odbc_pconnect()) can reuse the
persistent connection."
So, I'm guessing that either you are using odbc_pconnect() in at least
one of the places, or that the PHP documentation people just forgot to
note this feature's existence in the odbc_connect() documentation but it
is there nevertheless.
You can check this by var_dump()'ing the two supposedly different
connection handles, and see if they are actually the same.
And to solve this, you could use a different user name / password pair
for the two different connection; or even simpler, add another ODBC
alias to the same server, just to fool PHP into thinking that it's a
different server.
Now I don't know how that's exactly done in ODBC, it's beyond me why
would anyone want to interface with FreeTDS via ODBC in PHP when you
have sybase/sybase_ct for Sybase and mssql for MSSQL.
Since I'm using mssql_connect(), I could simply duplicate the same
connection in freetds.conf under a new name.
All this has nothing to do with FreeTDS.
--
Daniel
More information about the FreeTDS
mailing list