Please note that mssql_pconnect creates a connection for the pool for *each process*. If you have "ThreadsPerChild" set to 50 in apache, and mssql.max_procs set to 25 in php, then eventually you will get mssql_pconnect failing to give you a connection to the database. This has stumped me for quite a while, and the answer finally presented itself thanks to the people in #php.
mssql_pconnect
(PHP 4, PHP 5, PECL odbtp:1.1.1-1.1.4)
mssql_pconnect — Apre una connessione persistente con MS SQL
Descrizione
La funzione restituisce: o un identificativo di connessione persistente, o FALSE se si verifica un errore.
La funzione mssql_pconnect() agisce come mssql_connect() tranne che per due differenze.
Prima differenza, quando si cerca di stabilire la connessione, la funzione per prima cosa cerca di trovare una connessione (persistente) già aperta verso lo stesso server, con i medesimi utenti e password. Se ne viene trovata una, la funzione restituisce l'identificativo di quella connessione, invece di stabilirne una nuova.
Seconda differenza, la connessione con il server SQL non verrà chiusa al termine dello script. Il collegamento resterà aperto per utilizzi futuri (la funzione mssql_close() non chiude i collegamenti aperti da mssql_pconnect()).
Per questo motivo questo tipo di collegamento viene definito 'persistente'.
mssql_pconnect
11-Mar-2004 04:17
11-Feb-2004 12:32
If you are running PHP/Apache combination on a Windows machine that is part of a domain, using NT Authentication to connect to a MS SQL Server, you must to do the following things:
1) Turn NT Authentication On (under MSSQL in php.ini)
2) Configure the Apache service to run as the user that is authorized to access the MS SQL server.
Hope this helps save someone the time that it took me to track down!
17-Jul-2002 07:08
Be careful with pconnect!
Platform: RH Linux 7.3, PHP 4.2.1. FreeTDS.
pconnect does give you better time than connect (about 0.25-0.4 seconds gain) BUT:
- occasionally, I've experienced "quirks" when fetch() would randomly return empty recordsets from stored procedurest that can_not return empty recordsets by definition.
- if you restart MSSQL server while some of the connections did not time out, next pconnect() will not establish a new connection! It will return an old one, so next time you do execute() or query() your script will just _hang_ until timeouted by Apache.
All of the above I believe are FreeTDS problems, not PHP. I wonder if somebody with PHP+Sybase lib got pconnect to work.
12-Jul-2001 04:18
One should not that persistent connections are not persistent under a CGI interface.
