Connexions
Le serveur MySQL supporte l'utilisation de différentes couches de transport
pour les connexions. Les connexions peuvent utiliser TCP/IP, les sockets
de domaine Unix ou les pipes nommés Windows.
Le nom d'hĂŽte localhost a une signification particuliĂšre.
Il est lié à l'utilisation des sockets de domaine Unix.
Pour ouvrir une connexion TCP/IP sur l'hĂŽte local, 127.0.0.1 doit ĂȘtre utilisĂ©
au lieu de localhost.
Exemple #1 Signification spéciale de localhost
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
echo $mysqli->host_info . "\n";
$mysqli = new mysqli("127.0.0.1", "user", "password", "database", 3306);
echo $mysqli->host_info . "\n";
L'exemple ci-dessus va afficher :
Localhost via UNIX socket
127.0.0.1 via TCP/IP
ParamÚtres par défaut d'une connexion
Suivant la fonction de connexion utilisĂ©e, des paramĂštres peuvent ĂȘtre omis.
Si un paramĂštre n'est pas fourni, alors l'extension tentera d'utiliser les valeurs
par défaut définies dans le fichier de configuration de PHP.
Exemple #2 ParamÚtres par défaut
mysqli.default_host=192.168.2.27
mysqli.default_user=root
mysqli.default_pw=""
mysqli.default_port=3306
mysqli.default_socket=/tmp/mysql.sock
Ces valeurs de paramÚtres sont alors passées à la bibliothÚque cliente
utilisée par l'extension. Si la bibliothÚque cliente détecte un paramÚtre
vide ou non dĂ©fini, alors elle utilisera les valeurs par dĂ©faut internes Ă
la bibliothĂšque.
Valeurs par défaut internes à la bibliothÚque pour la connexion
Si la valeur de l'hÎte n'est pas définie ou est vide, alors la bibliothÚque cliente
utilisera par défaut une connexion de type socket Unix sur localhost.
Si le socket n'est pas défini ou vide, et qu'une connexion de type socket Unix est
demandée, alors une connexion au socket par défaut /tmp/mysql.sock
sera tentée.
Sous les systÚmes Windows, le nom d'hÎte . est interprété
par la bibliothÚque cliente comme une tentative d'ouvrir un tube nommé Windows
pour la connexion. Dans ce cas, le paramÚtre socket est interprété comme
un tube nommé. S'il n'est pas fourni ou vide, alors le socket (tube nommé)
vaudra par défaut \\.\pipe\MySQL.
Si ni un socket de domaine Unix, ni un tube nommé Windows n'est fourni, une connexion
de base sera établie et si la valeur du port n'est pas définie, la bibliothÚque
utilisera le port 3306.
La bibliothĂšque mysqlnd et la bibliothĂšque
cliente MySQL (libmysqlclient) implĂ©mentent la mĂȘme logique pour dĂ©terminer les valeurs
par défaut.
Options de connexion
Des options de connexion sont disponibles pour, par exemple, définir
des commandes d'initialisation à exécuter lors de la connexion, ou
pour demander l'utilisation d'un jeu de caractĂšres particulier. Les options
de connexion doivent ĂȘtre dĂ©finies avant la connexion au rĂ©seau.
Pour définir une option de connexion, l'opération de connexion doit
ĂȘtre effectuĂ©e en 3 Ă©tapes : crĂ©ation d'un gestionnaire de connexion avec
mysqli_init() ou mysqli::__construct(),
définition des options demandées en utilisant
mysqli::options(), et connexion au réseau avec
mysqli::real_connect().
File d'attente de connexion
L'extension mysqli supporte les connexions persistantes aux bases de données,
qui sont des connexions spéciales. Par défaut, chaque connexion à une
base de données ouverte par un script est soit explicitement close par
l'utilisateur durant l'exécution, ou soit libérée automatiquement à la fin
du script. Ce n'est pas le cas d'une connexion persistante. En effet,
elle sera placée dans une file d'attente pour une ré-utilisation future,
si une connexion au mĂȘme serveur, utilisant le mĂȘme nom d'utilisateur, le
mĂȘme mot de passe, le mĂȘme socket, le mĂȘme port, ainsi que la mĂȘme base de donnĂ©es
est ouverte. Cette ré-utilisation permet d'alléger la charge indue par les
connexions.
Chaque processus PHP utilise sa propre file d'attente de connexions mysqli.
Suivant le modÚle de déploiement du serveur web, un processus PHP peut
servir une ou plusieurs requĂȘtes. Toutefois, une connexion mise en file d'attente
peut ĂȘtre utilisĂ©e par un ou plusieurs scripts par la suite.
Les connexions persistantes
Si une connexion persistante pour une combinaison d'hĂŽte, de nom d'utilisateur,
de mot de passe, de socket, de port et de base de données inutilisée ne peut
ĂȘtre trouvĂ©e dans la file d'attente de connexion, alors mysqli ouvrira une nouvelle
connexion. L'utilisation des connexions persistantes peut ĂȘtre activĂ©e ou dĂ©sactivĂ©e
en utilisant la directive PHP
mysqli.allow_persistent.
Le nombre total de connexions ouvertes par un script peut ĂȘtre limitĂ© avec
la directive mysqli.max_links.
Le nombre maximal de connexions persistantes par processus PHP peut ĂȘtre
restreint avec la directive mysqli.max_persistent.
Veuillez noter que le serveur web peut engendrer plusieurs processus PHP.
Une plainte courante contre les connexions persistantes est que leur
statut n'est pas réinitialisé avant la ré-utilisation. Par exemple,
les transactions ouvertes et non terminées ne sont pas automatiquement
annulées. Mais aussi, les modifications autorisées survenant entre le moment
oĂč la connexion est mise en file d'attente et sa rĂ©-utilisation ne seront
pas prises en compte. Ce comportement peut ĂȘtre vu comme un effet de
bord non désiré. Au contraire, le nom persistent
peut ĂȘtre compris comme une promesse sur le fait que le statut persiste
réellement.
L'extension mysqli supporte deux interprétations d'une connexion persistante :
statut persistant, et un statut réinitialisé avant ré-utilisation. Par
défaut, il sera réinitialisé. Avant qu'une connexion persistante ne soit
réutilisée, l'extension mysqli appelle implicitement la fonction
mysqli::change_user() pour réinitialiser le statut.
La connexion persistante apparaĂźt Ă l'utilisateur comme si elle venait
juste d'ĂȘtre ouverte. Aucune trace d'une utilisation prĂ©cĂ©dente ne
sera visible.
La fonction mysqli::change_user() est une opération couteuse.
Pour de meilleures performances, les utilisateurs peuvent vouloir re-compiler
l'extension avec le drapeau de compilation MYSQLI_NO_CHANGE_USER_ON_PCONNECT.
Ainsi, il sera laissé à l'utilisateur le choix entre un comportement sécurisé
et une performance optimisée. Les deux ont comme but l'optimisation. Pour
une utilisation plus simple, le comportement sécurisé a été placé
par défaut au détriment d'une performance maximale.
Voir aussi