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