(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 = nullEstilo procedimental
$hostname = null,$username = null,$password = null,$database = null,$port = null,$socket = nullAbre 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
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
socketno 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 si ocurre un error.
mysqli::connect() devuelve true en caso de éxito o false si ocurre un error.
Anterior a PHP 8.1.0, devuelve null en caso de éxito.
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.
| 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 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));
}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 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 entornoSYSTEMROOTno estará disponible y PHP tendrá problemas para cargar Winsock.