PHPKonf: Istanbul PHP Conference 2017


(PHP 4, PHP 5, PECL odbtp >= 1.1.1)

mssql_pconnectOuvre une connexion persistante à un serveur MS SQL


Cette fonction a été SUPPRIMÉE en PHP 7.0.0.

Les alternatives à cette fonction incluent :


resource mssql_pconnect ([ string $servername [, string $username [, string $password [, bool $new_link = false ]]]] )

mssql_pconnect() se comporte comme mssql_connect() mais avec deux différences :

Premièrement, lors de la connexion, la fonction va commencer par rechercher un lien persistant déjà ouvert avec le même hôte, le même nom d'utilisateur, username et le même mot de passe password. Si un tel lien est trouvé, cet identifiant sera retourné, au lieu d'ouvrir une autre connexion.

Deuxièmement, la connexion au serveur SQL ne sera pas fermée à la fin du script, mais restera ouverte, pour d'autres utilisations ultérieures (mssql_close() ne fermera pas un lien établi avec mssql_pconnect()).

C'est pourquoi ce type de lien est dit 'persistant'.

Liste de paramètres


Le serveur MS SQL. Il peut également contenir un numéro de port, e.g. hostname:port.


Le nom d'utilisateur


Le mot de passe


Si un deuxième appel est fait à mssql_pconnect() avec les mêmes arguments, un nouveau lien ne sera pas retourné, mais le lien déjà ouvert sera utilisé. Ce paramètre modifie ce comportement et fait que la fonction mssql_pconnect() ouvre toujours un nouveau lien, même si la fonction mssql_pconnect() a été appelée avant, avec les mêmes paramètres.

Valeurs de retour

Retourne un identifiant de lien positif MS SQL en cas de succès, ou FALSE si une erreur survient.


Exemple #1 mssql_pconnect() et le paramètre new_link

// Connexion à MSSQL et sélection de la base de données
$link1 mssql_pconnect('MANGO\SQLEXPRESS''sa''phpfi');

// Création d'une nouvelle connexion
$link2 mssql_pconnect('MANGO\SQLEXPRESS''sa''phpfi'true);

add a note add a note

User Contributed Notes 5 notes

m1tk4 at hotmail dot com
14 years ago
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.
dave at dontspamme dot com
12 years ago
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!
kagaku at gmail dot com
4 years ago
Be careful when utilizing mssql_pconnect to connect to multiple databases on the same server using different credentials. For example:

/* first connection */
$conn1 = mssql_pconnect('production-server','sa','1234');

$row = mssql_query('select top 10 * from invoices', $conn1);

/* open another connection, same server different */
$conn2 = mssql_pconnect('production-server','loweruser','6789');


Results in the error:

PHP Warning:  mssql_select_db(): Unable to select database:  someotherdb

I suspect mssql_pconnect detects a connect opened to "production-server" and just re-uses it, regardless of whether or not the credentials are the same. We did not notice this until consolidating two different MSSQL servers onto one server with two databases with different users/permissions. Reverting back to mssql_connect() solves the problem.
php at rawhide dot cjb dot net
15 years ago
One should not that persistent connections are not persistent under a CGI interface.
php at burntpopcorn dot net
12 years ago
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.
To Top