mysqli::real_connect

mysqli_real_connect

(PHP 5, PHP 7, PHP 8)

mysqli::real_connect -- mysqli_real_connectEstablece una conexión con un servidor MySQL

Descripción

Estilo orientado a objetos

public mysqli::real_connect(
    ?string $hostname = null,
    ?string $username = null,
    #[\SensitiveParameter] ?string $password = null,
    ?string $database = null,
    ?int $port = null,
    ?string $socket = null,
    int $flags = 0
): bool

Estilo por procedimientos

mysqli_real_connect(
    mysqli $mysql,
    ?string $hostname = null,
    ?string $username = null,
    #[\SensitiveParameter] ?string $password = null,
    ?string $database = null,
    ?int $port = null,
    ?string $socket = null,
    int $flags = 0
): bool

mysqli_real_connect() establece una conexión con un servidor MySQL.

Esta función difiere de mysqli_connect():

  • mysqli_real_connect() requiere un objeto válido que debe ser creado por la función mysqli_init().

  • Con la función mysqli_options(), se pueden configurar diferentes opciones de conexión.

  • Existe un parámetro adicional flags.

Parámetros

link

Sólo estilo por procediminetos: Un identificador de enlace devuelto por mysqli_connect() o mysqli_init()

hostname

Puede ser un nombre de host o una dirección IP. Al pasar null, el valor se recupera desde mysqli.default_host. Si es posible, se utilizarán pipes en lugar del protocolo TCP/IP. El protocolo TCP/IP se utiliza si se proporciona un nombre de host y un número de puerto juntos, por ejemplo localhost:3308.

username

El nombre de usuario MySQL o null para asumir el nombre de usuario según la opción ini mysqli.default_user.

password

La contraseña MySQL o null para asumir la contraseña según la opción ini mysqli.default_pw.

database

La base de datos por defecto a utilizar al ejecutar consultas o null.

port

El número de puerto al que intentar conectarse al servidor MySQL o null para asumir el puerto según la opción ini mysqli.default_port.

socket

El socket o el pipe nombrado que debería utilizarse, o null para asumir el socket según la opción ini mysqli.default_socket.

Nota:

Especificar explícitamente el parámetro socket no determina el tipo de método utilizado al conectarse a MySQL. El método se determina por el parámetro hostname.

flags

Con el parámetro flags, se pueden configurar diferentes directivas de conexión:

Opciones soportadas
Nombre Descripción
MYSQLI_CLIENT_COMPRESS Utiliza el protocolo comprimido
MYSQLI_CLIENT_FOUND_ROWS Devuelve el número de filas encontradas, no el número de filas afectadas.
MYSQLI_CLIENT_IGNORE_SPACE Permite espacios entre los nombres de funciones y los argumentos. Esto fuerza a que los nombres de funciones sean palabras reservadas.
MYSQLI_CLIENT_INTERACTIVE Permite interactive_timeout segundos (en lugar de wait_timeout segundos) de inactividad antes de cerrar la conexión.
MYSQLI_CLIENT_SSL Utiliza el cifrado SSL
MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT Igual que MYSQLI_CLIENT_SSL, pero desactiva la validación de los certificados SSL proporcionados. Esta constante está prevista solo para instalaciones que utilizan el driver MySQL nativo y MySQL 5.6 o superior.

Nota:

Por razones de seguridad, la opción MULTI_STATEMENT no es soportada en PHP. Si se desea ejecutar múltiples comandos, utilice la función mysqli_multi_query().

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Errores/Excepciones

If mysqli error reporting is enabled (MYSQLI_REPORT_ERROR) and the requested operation fails, a warning is generated. If, in addition, the mode is set to MYSQLI_REPORT_STRICT, a mysqli_sql_exception is thrown instead.

Historial de cambios

Versión Descripción
7.4.0 Todos los parámetros son ahora nullable.

Ejemplos

Ejemplo #1 Ejemplo con mysqli::real_connect()

Estilo orientado a objetos

<?php

$mysqli
= mysqli_init();
if (!
$mysqli) {
die(
'mysqli_init falló');
}

if (!
$mysqli->options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die(
'Configuración de MYSQLI_INIT_COMMAND falló');
}

if (!
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die(
'Configuración de MYSQLI_OPT_CONNECT_TIMEOUT falló');
}

if (!
$mysqli->real_connect('localhost', 'my_user', 'my_password', 'my_db')) {
die(
'Error de conexión (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}

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

$mysqli->close();
?>

Estilo orientado a objetos, con extensión de la clase mysqli

<?php

class foo_mysqli extends mysqli {
public function
__construct($host, $user, $pass, $db) {
parent::__construct();

if (!
parent::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die(
'Configuración de MYSQLI_INIT_COMMAND falló');
}

if (!
parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die(
'Configuración de MYSQLI_OPT_CONNECT_TIMEOUT falló');
}

if (!
parent::real_connect($host, $user, $pass, $db)) {
die(
'Error de conexión (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
}

$db = new foo_mysqli('localhost', 'my_user', 'my_password', 'my_db');

echo
'Éxito... ' . $db->host_info . "\n";

$db->close();
?>

Estilo por procedimientos

<?php

$link
= mysqli_init();
if (!
$link) {
die(
'mysqli_init falló');
}

if (!
mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die(
'Configuración de MYSQLI_INIT_COMMAND falló');
}

if (!
mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die(
'Configuración de MYSQLI_OPT_CONNECT_TIMEOUT falló');
}

if (!
mysqli_real_connect($link, 'localhost', 'my_user', 'my_password', 'my_db')) {
die(
'Error de conexión (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}

echo
'Éxito... ' . mysqli_get_host_info($link) . "\n";

mysqli_close($link);
?>

El resultado de los ejemplos sería:

Éxito... MySQL host info: localhost via TCP/IP

Notas

Nota:

MySQLnd siempre utiliza el juego de caracteres de idioma predeterminado. El juego de caracteres se envía en la autentificación/acuerdo que se produce durante la conexión, que utilizará mysqlnd.

Libmysqlclient utiliza el juego de caracteres predeterminado definido en my.cnf o se puede establecer llamando mysqli_options() antes de user mysqli_real_connect(), pero después de mysqli_init().

Ver también

add a note

User Contributed Notes 1 note

up
0
aschmidt at anamera dot net
4 days ago
Despite native driver (mysqlnd 8.3.20) and MySQL >5.6, the flag

MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT

will cause connection to be rejected as "not secure", if server is set to require SSL connection (--require-secure-transport=ON).

It appears that MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT is seemingly accepted, but will not actually initiate a secure connection.

Similarly, if one tries to turn off certificate validation by setting options:

$mysqli->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, 0)

then this will return "false", indicating that the option setting was not successful.
To Top