mysqli::__construct
PHP Manual
PHP Manual»mysqli»mysqli::__construct

mysqli::__construct

mysqli::connect

mysqli_connect

(PHP 5, PHP 7, PHP 8)

mysqli::__construct -- mysqli::connect -- mysqli_connect — Abre una conexión a un servidor MySQL

Descripción

Estilo orientado a objetos

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

Estilo procedimental

function 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

La contraseña MySQL o null para asumir la contraseña basándose en la opción ini mysqli.default_pw.

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 si ocurre un error.

mysqli::connect() devuelve true en caso de éxito o false si ocurre un error. Antes de PHP 8.1.0, devuelve null en caso de éxito.

Errores/Excepciones

Si el informe de errores de mysqli está habilitado (MYSQLI_REPORT_ERROR) y la operación solicitada falla, se genera una advertencia. Si, además, el modo está configurado como MYSQLI_REPORT_STRICT, se lanza una mysqli_sql_exception en su lugar.

A partir de PHP 8.5.0, llamar al constructor sobre un objeto ya construido lanza un Error.

Historial de cambios

Versión Descripción
8.5.0 Llamar al constructor sobre un objeto ya construido ahora lanza un Error.
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 procedimental

<?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));

Los ejemplos anteriores mostrarán 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 procedimental

<?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 asume el juego de caracteres predeterminado del servidor. Este juego de caracteres es enviado durante el intercambio de conexión/autenticación, el cual mysqlnd utilizará.

Libmysqlclient utiliza el juego de caracteres predeterminado establecido en el my.cnf o mediante una llamada explícita a mysqli_options() antes de llamar a 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 los ejemplos anteriores.

Nota:

Si es necesario configurar opciones, como el tiempo de espera de conexión, se debe utilizar mysqli_real_connect() en su lugar.

Nota:

Llamar al constructor sin parámetros tiene el mismo efecto que llamar a 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.

Véase también

To Top