mysqli::__construct

mysqli::connect

mysqli_connect

(PHP 5, PHP 7, PHP 8)

mysqli::__construct -- mysqli::connect -- mysqli_connectAbre una conexión a un servidor MySQL

Descripción

Estilo orientado a objetos

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

Estilo por procedimientos

mysqli_connect(
    ?string $hostname = null,
    ?string $username = null,
    #[\SensitiveParameter] ?string $password = null,
    ?string $database = null,
    ?int $port = null,
    ?string $socket = null
): mysqli|false

Abre una conexión al servidor MySQL.

Parámetros

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.

Prefijar el host con p: abre una conexión persistente. mysqli_change_user() se llama automáticamente en las conexiones que se utilizan en el grupo de conexiones.

username

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

password

Si la contraseña no se especifica (se pasa el valor null), el servidor MySQL intentará identificar al usuario examinando solo los registros donde los usuarios no tienen contraseña. Esto permite a un usuario disfrutar de múltiples permisos (dependiendo de si se proporciona una contraseña o no).

database

La base de datos predeterminada 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 debe utilizarse, o null para asumir el socket según la opción ini mysqli.default_socket.

Nota:

Especificar el parámetro socket no determinará explícitamente el tipo de conexión que se utilizará al conectarse al servidor MySQL. Esto está determinado por el parámetro hostname.

Valores devueltos

mysqli::__construct() siempre devuelve un objeto que representa la conexión a un servidor MySQL, incluso si la conexión ha fallado.

mysqli_connect() devuelve un objeto que representa la conexión al servidor MySQL, o false en caso de error.

mysqli::connect() devuelve true en caso de éxito o false en caso de error. Anterior a PHP 8.1.0, devuelve null en caso de éxito.

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
8.1.0 mysqli::connect() ahora devuelve true en lugar de null en caso de éxito.
7.4.0 Todos los parámetros ahora son nullable.

Ejemplos

Ejemplo #1 Ejemplo mysqli::__construct()

Estilo orientado a objetos

<?php
/* Siempre se debe activar el informe de errores para mysqli antes de intentar una conexión */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
/* Establecer el juego de caracteres deseado después de establecer una conexión */
$mysqli->set_charset('utf8mb4');
printf("Éxito... %s\n", $mysqli->host_info);

Estilo por procedimientos

<?php
/* Siempre se debe activar el informe de errores para mysqli antes de intentar una conexión */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
/* Establecer el juego de caracteres deseado después de establecer una conexión */
mysqli_set_charset($mysqli, 'utf8mb4');
printf("Éxito... %s\n", mysqli_get_host_info($mysqli));

El resultado de los ejemplos sería algo similar a:

Éxito... localhost via TCP/IP

Ejemplo #2 Extender la clase mysqli

<?php
class FooMysqli extends mysqli {
public function
__construct($host, $user, $pass, $db, $port, $socket, $charset) {
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
parent::__construct($host, $user, $pass, $db, $port, $socket);
$this->set_charset($charset);
}
}
$db = new FooMysqli('localhost', 'my_user', 'my_password', 'my_db', 3306, null, 'utf8mb4');

Ejemplo #3 Manejo manual de errores

Si el informe de errores está desactivado, el desarrollador es responsable de verificar y manejar los fallos

Estilo orientado a objetos

<?php
error_reporting
(0);
mysqli_report(MYSQLI_REPORT_OFF);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
if (
$mysqli->connect_errno) {
throw new
RuntimeException('error de conexión mysqli: ' . $mysqli->connect_error);
}
/* Establecer el juego de caracteres deseado después de establecer una conexión */
$mysqli->set_charset('utf8mb4');
if (
$mysqli->errno) {
throw new
RuntimeException('error mysqli: ' . $mysqli->error);
}

Estilo por procedimientos

<?php
error_reporting
(0);
mysqli_report(MYSQLI_REPORT_OFF);
$mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
if (
mysqli_connect_errno()) {
throw new
RuntimeException('error de conexión mysqli: ' . mysqli_connect_error());
}
/* Establecer el juego de caracteres deseado después de establecer una conexión */
mysqli_set_charset($mysqli, 'utf8mb4');
if (
mysqli_errno($mysqli)) {
throw new
RuntimeException('error mysqli: ' . mysqli_error($mysqli));
}

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().

Nota:

Estilo orientado a objetos solamente: si la conexión falla, se devuelve un objeto de todos modos. Para verificar si la conexión falló, utilice la función mysqli_connect_error() o la propiedad mysqli->connect_error como en el ejemplo anterior.

Nota:

Si es necesario configurar opciones, como el tiempo de espera de conexión, mysqli_real_connect() debe ser utilizado.

Nota:

Llamar al constructor sin parámetros tiene el mismo efecto que llamar mysqli_init().

Nota:

El error "Can't create TCP/IP socket (10106)" significa generalmente que la directiva de configuración variables_order no contiene el carácter E. En Windows, si el entorno no se copia, la variable de entorno SYSTEMROOT no estará disponible y PHP tendrá problemas para cargar Winsock.

Ver también