(PHP 5, PHP 7, PHP 8)
mysqli::__construct -- mysqli::connect -- mysqli_connect — Abre una conexión a un servidor MySQL
Estilo orientado a objetos
$hostname
= null
,$username
= null
,$password
= null
,$database
= null
,$port
= null
,$socket
= null
$hostname
= null
,$username
= null
,$password
= null
,$database
= null
,$port
= null
,$socket
= null
Estilo por procedimientos
$hostname
= null
,$username
= null
,$password
= null
,$database
= null
,$port
= null
,$socket
= null
Abre una conexión al servidor MySQL.
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ámetrohostname
.
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.
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.
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. |
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));
}
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ácterE
. En Windows, si el entorno no se copia, la variable de entornoSYSTEMROOT
no estará disponible y PHP tendrá problemas para cargar Winsock.