El servidor MySQL soporta el uso de diferentes capas de transporte para conexiones. Las conexiones usan TCP/IP, sockets de dominio Unix o tuberías con nombre de Windows.
El nombre del host localhost
tiene un significado especial.
Está vinculado al uso de sockets de dominio Unix. No es posible
abrir una conexión TCP/IP usando como nombre de host localhost
,
se debe usar 127.0.0.1
en su lugar.
Ejemplo #1 Significado especial de localhost
<?php
$mysqli = new mysqli("localhost", "usuario", "contraseña", "basedatos");
if ($mysqli->connect_errno) {
echo "Fallo al conectar a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";
$mysqli = new mysqli("127.0.0.1", "usuario", "contraseña", "basedatos", 3306);
if ($mysqli->connect_errno) {
echo "Fallo al conectar a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";
?>
El resultado del ejemplo sería:
Localhost via UNIX socket 127.0.0.1 via TCP/IP
Valores predeterminados de los parámetros de conexión
Dependiendo de la función de conexión usada se pueden omitir varios parámetros. Si no se proporciona un parámetro, la extensión intentará usar los valores predeterminados que están establecidos en el fichero de configuración de PHP.
Ejemplo #2 Configuración predeterminada
mysqli.default_host=192.168.2.27 mysqli.default_user=root mysqli.default_pw="" mysqli.default_port=3306 mysqli.default_socket=/tmp/mysql.sock
Los valores resultantes de los parámetros son pasados a la biblioteca cliente que esté usando esta extensión. Si la biblioteca cliente detecta parámetros vacíos o no establecidos, puede usar los valores internos predeterminados de la biblioteca.
Valores predeterminados internos de conexión de la biblioteca
Si el valor del host no está establecido o está vacío, la biblioteca cliente
usará una conexión de socket Unix sobre localhost
.
Si el socket no está establecido o está vacío, y es solicitada una conexión de socket Unix,
se intentará una conexiónal socket predeterminado de
/tmp/mysql.sock
.
En sistemas Windows, el nombre de host .
es interpretado
por la biblioteca cliente como un intento de abrir una conexión basada en una tubería con nombre
de Windows. En este caso el parámetro del socket se interpreta como el nombre de la
tubería. Si no se proporciona o está vacío, se usará como socket (nombre de la tubería)
\\.\pipe\MySQL
.
Si no está establecida una conexión basada en un socket de dominio Unix ni en una
tubería con nombre de Windows y el valor del parámetro del puerto no está establecido, la biblioteca
usuará como puerto predeterminado el 3306
.
La biblioteca mysqlnd y la Biblioteca Cliente de MySQL (libmysqlclient) implementan la misma lógica para determinados valores predeterminados.
Opciones de conexión
Las opciones de conexión están disponibles para, por ejemplo, establecer comando iniciales que son ejecutados sobre la conexión, o para solicitar el uso de ciertos conjuntos de caracteres. Las opciones de conexión deben ser establecidas antes de que se establezcla una conexión de red.
Para configurar una opción de conexión, la operación de conexión ha de ser realizada en tres pasos: crear un gestor de conexión con mysqli_init(), establecer las opciones solicitadas usando mysqli_options(), y establecer la conexión de red con mysqli_real_connect().
Caché de conexiones
La extensión mysqli soporta conexiones persistentes a bases de datos, las cuales son un tipo especial de conexiones almacenadas en caché. Por defecto, cada conexión a una base de datos abierta por un script es cerrada explícitamente por el usuario durante el tiempo de ejecución o liberada automáticamente al finalizar el script. Una conexión persistente no. En su lugar, se coloca en una caché para su reutilización posterior, si una conexión es abierta al mismo servidor usando el mismo nombre de usuario, contraseña, socket, puerto y base de datos predeterminada. La reutilización ahorra gastos de conexioń.
Cada procesos de PHP utiliza su propia caché de conexiones mysqli. Dependiendo de modelo de distribución del servidor web, un proceso PHP puede servir una o múltiples peticiones. Por lo tanto, una conexión almacenada en caché puede ser utilizada posteriormente por uno o más scripts.
Conexiones persistentes
Si una conexión persistente no usada con una combiación dada de host, nombre de usuario, contraseña, socket, puerto y base de datos predeterminada no se puede encontrar en la caché de conexiones, mysqli abrirá una nueva conexión. El uso de conexiones persistentes se puede habilitar y deshabilitar usando la directiva de PHP mysqli.allow_persistent. El número total de conexiones abiertas por un script puede ser limitado con mysqli.max_links. El número máximo de conexiones persistentes por proceso de PHP puede restringirse con mysqli.max_persistent. Observe que el servidor web puede engendrar muchos procesos de PHP.
Una queja común sobre las conexiones persistentes qes que su estado no
es reiniciado antes de su uso. Por ejemplo, las transacciones abiertas y no finalizadas no son
automéáticamente reanudadas. También, los cambios de autorización que ocurran
durante la colocación de la conexión en la caché y su reutilización
no están reflejados. Esto puede verse como un efecto secundario no deseado. Al contrario,
el nombre persistente
puede entenderse como una promesa
de que el estado persiste.
La extensión mysqli soporta ambas interpretaciones de una conexión persistente: el estado persiste, y el estado se reinicia antes de la reutilización. Lo predeterminado es la reiniciación. Antes de que una conexión sea reutilizada, la extensión llama implicitamente a mysqli_change_user() para reiniciar el estado. La conexión persistente aparece al usuario como si estuviera recién abierta. No son visibles ningún artefacto de los usos previos.
La función mysqli_change_user() es una operación cara.
Para un mejor rendimiento, los usuarios pueden recompilar la extensión con la
bandera de compilación MYSQLI_NO_CHANGE_USER_ON_PCONNECT
establecida.
Corresponde al usuario elegir entre comportamiento seguro o mejor rendimiento. Ambas son metas de optimización válidas. Para facilitar el uso, el comportamiento seguro es el predeterminado a expensas de un rendimiento máximo.
See also