W3docs

real_connect

En este artículo, analizamos la función mysqli_real_connect() en PHP, utilizada para establecer una conexión con una base de datos MySQL.

En este artículo, analizaremos el método real_connect() en PHP, que se utiliza para establecer una conexión con una base de datos MySQL. (El equivalente procedimental es mysqli_real_connect().)

Esta página explica en qué se diferencia real_connect() de un simple mysqli_connect(), la lista completa de parámetros, cómo habilitar SSL y otros indicadores de conexión, y los errores más comunes.

¿Qué es real_connect() y para qué sirve?

El método real_connect() abre una conexión a un servidor MySQL, igual que mysqli_connect(). La diferencia clave es que real_connect() opera sobre un manejador de conexión que ya ha sido creado con mysqli_init(), en lugar de crear y conectar en un solo paso.

Ese paso adicional es importante porque le otorga una ventana entre la creación del manejador y la conexión, donde puede configurar opciones que solo pueden establecerse antes de que se abra la conexión. Use real_connect() (en lugar de mysqli_connect()) cuando necesite:

  • Establecer opciones de conexión con mysqli_options() — por ejemplo, un tiempo de espera de conexión (MYSQLI_OPT_CONNECT_TIMEOUT) o soporte para archivos locales.
  • Habilitar una conexión SSL/TLS con ssl_set() y el indicador MYSQLI_CLIENT_SSL.
  • Pasar indicadores de cliente como MYSQLI_CLIENT_COMPRESS o MYSQLI_CLIENT_FOUND_ROWS.
  • Abrir una conexión persistente añadiendo el prefijo p: al host.

Si no necesita ninguna de estas opciones, el más sencillo mysqli_connect() es perfectamente válido.

Uso básico

real_connect() siempre sigue un patrón de dos pasos: crear el manejador y luego conectar. Aquí está el enfoque orientado a objetos:

<?php
$mysqli = mysqli_init();

if (!$mysqli) {
    die('mysqli_init failed');
}

if (!$mysqli->real_connect('localhost', 'username', 'password', 'database')) {
    die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}

echo 'Success... ' . $mysqli->host_info . "\n";

$mysqli->close();
?>

Primero creamos un manejador MySQLi con mysqli_init() y verificamos que tuvo éxito. Luego llamamos a real_connect() sobre el objeto $mysqli para conectar. Si falla, reportamos el error con connect_errno y connect_error y detenemos la ejecución; si tiene éxito, imprimimos la información del host y finalmente liberamos la conexión con close().

Parámetros

real_connect() acepta los siguientes parámetros, todos opcionales, en este orden:

ParámetroDescripciónValor predeterminado
hostNombre de host o IP. Añada el prefijo p: para una conexión persistente.localhost (o valor predeterminado de ini)
usernameNombre de usuario de MySQL.usuario actual
passwordContraseña del usuario.""
databaseBase de datos predeterminada a seleccionar al conectar.""
portNúmero de puerto TCP.3306
socketSocket Unix o tubería con nombre de Windows.del ini
flagsMáscara de bits de indicadores de cliente (ver más abajo).0

Nota: con la API OO el manejador es el objeto, por lo que el primer argumento es el host. Con el procedural mysqli_real_connect($link, $host, ...), el enlace se pasa primero.

Establecer opciones antes de conectar

Esta es la razón principal por la que existe real_connect(). Configure el manejador con mysqli_options() entre init y real_connect:

<?php
$mysqli = mysqli_init();

// These can only be set before connecting:
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
$mysqli->options(MYSQLI_INIT_COMMAND, "SET autocommit = 0");

if (!$mysqli->real_connect('localhost', 'username', 'password', 'database')) {
    die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}

echo 'Connected with a 5-second timeout.';
$mysqli->close();
?>

Conectar con SSL e indicadores de cliente

El séptimo parámetro es una máscara de bits de indicadores de cliente. Para requerir una conexión cifrada, configure los certificados con ssl_set() y pase MYSQLI_CLIENT_SSL:

<?php
$mysqli = mysqli_init();

$mysqli->ssl_set(null, null, '/path/to/ca-cert.pem', null, null);

$mysqli->real_connect(
    'db.example.com', 'username', 'password', 'database',
    3306, null,
    MYSQLI_CLIENT_SSL
);

echo 'Encrypted connection established.';
$mysqli->close();
?>

Indicadores comunes que puede combinar con |:

  • MYSQLI_CLIENT_SSL — usar cifrado SSL/TLS.
  • MYSQLI_CLIENT_COMPRESS — usar el protocolo comprimido.
  • MYSQLI_CLIENT_FOUND_ROWS — devolver filas coincidentes en lugar de filas modificadas.

Conexiones persistentes

Añadir el prefijo p: al host reutiliza una conexión existente del pool entre solicitudes en lugar de abrir una nueva cada vez, lo que puede reducir la sobrecarga de conexión en servidores con mucho tráfico:

<?php
$mysqli = mysqli_init();
$mysqli->real_connect('p:localhost', 'username', 'password', 'database');
?>

Errores comunes

  • Olvidar mysqli_init(). real_connect() debe llamarse sobre un manejador devuelto por mysqli_init(). Llamarlo sobre un objeto new mysqli() recién construido que ya está conectado fallará.
  • Verificar la propiedad de error incorrecta. Antes de que exista una conexión, use connect_errno / connect_error, no errno / error.
  • Establecer opciones demasiado tarde. Opciones como el tiempo de espera de conexión no tienen efecto una vez que la conexión está abierta — deben establecerse antes de real_connect().

Conclusión

El método real_connect() establece una conexión MySQL desde un manejador creado con mysqli_init(), brindándole la oportunidad de configurar tiempos de espera, SSL e indicadores de cliente que un mysqli_connect() directo no permite. Una vez conectado, puede ejecutar sentencias con query() y seleccionar una base de datos con select_db().

Práctica

Práctica
¿Qué permite hacer la función mysqli_real_connect() en PHP?
¿Qué permite hacer la función mysqli_real_connect() en PHP?
Was this page helpful?