(php 5.3.3)
If $port is a string, such as "3306", mysqli::query() will not work, even though mysqli_connect_errno() reports no error (value 0)!
<?php
$mysqli = new mysqli("localhost", "user","password","database", "3306"); //port is a string!
$mysqli->query("SELECT 1;")->fetch_assoc();
// Fatal error: Call to a member function fetch_assoc() on a non-object
?>
This is particularly strange, since mysqli::query() should return a result object, or a boolean.
So, be careful when you read your port from a string or config file. Cast it to int first:
<?php
$port = (int)$port;
?>
mysqli::__construct
mysqli_connect
(PHP 5)
mysqli::__construct -- mysqli_connect — Abre una nueva conexión al servidor MySQL
Descripción
Estilo orientado a objetos
$host = ini_get("mysqli.default_host")
[, string $username = ini_get("mysqli.default_user")
[, string $passwd = ini_get("mysqli.default_pw")
[, string $dbname = ""
[, int $port = ini_get("mysqli.default_port")
[, string $socket = ini_get("mysqli.default_socket")
]]]]]] )Estilo por procedimientos
$host = ini_get("mysqli.default_host")
[, string $username = ini_get("mysqli.default_user")
[, string $passwd = ini_get("mysqli.default_pw")
[, string $dbname = ""
[, int $port = ini_get("mysqli.default_port")
[, string $socket = ini_get("mysqli.default_socket")
]]]]]] )Abre una conexión al Servidor MySQL Server sobre el que se ejecuta.
Parámetros
-
host -
Puede ser o un nombre de host o una dirección IP. Pasando el valor
NULLo la cadena "localhost" a este parámetro, se asumirá el host local. Cuando es posible, se usarán tuberías en lugar del protocolo TCP/IP.Anteponer p: al host, abre una conexión persistente. mysqli_change_user() es automáticamente llamado en conexiones abiertas desde la caché de conexiones.
-
username -
El nombre de usuario de MySQL.
-
passwd -
Si no se proporciona o es
NULL, el servidor MySQL intentará autentificar el usuario solo con aquellos registros de usuarios que no tienen contraseña. Esto permite que un nombre de usuario ser usado con diferentes permisos (dependiendo de si se proporciona una contraseña o no). -
dbname -
Si se proporcioina, especificará la base de datos prederminada a usar cuando se realizan consultas.
-
port -
Especifica el número al que intentar conectar al servidor de MySQL.
-
socket -
Especifica el socket o la tubería con nombre que debería usarse.
Nota:
Especificar el parámetro
socketno determinará explicitamente el tipo de conexión a utilizar cuando se conecte al servidor MySQL. El modo de realizar la conexión a la base de datos MySQL es determinado por el parámetrohost.
Valores devueltos
Devuelve un objeto que representa la conexión al servidor MySQL.
Historial de cambios
| Versión | Descripción |
|---|---|
| 5.3.0 | Se añadió la capacidad de conexiones persistentes. |
Ejemplos
Ejemplo #1 Ejemplo de mysqli::__construct()
Estilo orientado a objetos
<?php
$mysqli = new mysqli('localhost', 'mi_usuario', 'mi_contraseña', 'mi_bd');
/*
* Esta es la forma OO "oficial" de hacerlo,
* AUNQUE $connect_error estaba averiado hasta PHP 5.2.9 y 5.3.0.
*/
if ($mysqli->connect_error) {
die('Error de Conexión (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
/*
* Use esto en lugar de $connect_error si necesita asegurarse
* de la compatibilidad con versiones de PHP anteriores a 5.2.9 y 5.3.0.
*/
if (mysqli_connect_error()) {
die('Error de Conexión (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo 'Éxito... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Estilo orientado a objetos cuando se extiende la clase mysqli
<?php
class foo_mysqli extends mysqli {
public function __construct($host, $usuario, $contraseña, $bd) {
parent::__construct($host, $usuario, $contraseña, $bd);
if (mysqli_connect_error()) {
die('Error de Conexión (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
}
$bd = new foo_mysqli('localhost', 'mi_usuario', 'mi_contraseña', '
');
echo 'Éxito... ' . $bd->host_info . "\n";
$bd->close();
?>
Estilo por procedimientos
<?php
$enlace = mysqli_connect('localhost', 'mi_usuario', 'mi_contraseña', 'mi_bd');
if (!$enlace) {
die('Error de Conexión (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo 'Éxito... ' . mysqli_get_host_info($enlace) . "\n";
mysqli_close($enlace);
?>
El resultado de los ejemplos serían:
Éxito... MySQL host info: localhost via TCP/IP
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:
Sólo para la sintaxis OO: Si una conexión falla se devuelve un objeto. Para comprobar si la conexión falló, use la función mysqli_connect_error() o la propiedad mysqli->connect_error como en los ejemplos anteriores.
Nota:
Si es necesario establecer las opciones, tales como el tiempo de espera de conexión, se debe utilizar mysqli_real_connect() en su lugar.
Nota:
Llamar al constructor sin parámetros es lo mismo que llamar a la función mysqli_init().
Nota:
El error "Can't create TCP/IP socket (10106)" normalmente significa que la directiva de configuración variables_order no contiene el carácter E. En Windows, si el entorno no es copiado, la variable de entorno SYSTEMROOT no estará disponible y PHP tendrá problemas al cargar Winsock.
Ver también
- mysqli_real_connect() - Abre una conexión a un servidor mysql
- mysqli_options() - Establecer opciones
- mysqli_connect_errno() - Devuelve el código de error de la última llamada
- mysqli_connect_error() - Devuelve una cadena con la descripción del último error de conexión
- mysqli_close() - Cierra una conexión a base de datos previamente abierta
If you get an error like
Can't connect to MySQL server on 'localhost' (10061)
and you use named pipes/socket connections (or aren't sure how you installed the MySQL server) try the following connect command:
<?php
mysqli_connect('.', $user_name, $password, $database_name, null, 'mysql');
?>
The '.' as hostname is absolutely necessary when using named pipes. 'localhost' won't work. 'mysql' is the standard name for the pipe/socket.
If you have error like "Trying to clone an uncloneable object of class..." when trying connect, add record
php_value zend.ze1_compatibility_mode 0
in your .htaccess file. This resolve connection problem.
If you want to connect via an alternate port (other than 3306), as you might when using an ssh tunnel to another host, using "localhost" as the hostname will not work.
Using 127.0.0.1 will work. Apparently, if you specify the host as "localhost", the constructor ignores the port specified as an argument to the constructor.
If you want to connect to local named pipe on windows and you get error "php_network_getaddresses: getaddrinfo failed: No such host is known. ", even if you using using "." as host, please check your if you are using mysqlnd driver: If this is true, then probably you need to update to version 5.4 of php:
Named pipes support for Windows was added in PHP version 5.4.0.
@ http://php.net/manual/en/mysqlnd.overview.php
Hopefully that will save you some time.
To specify charset in my.cnf file you just have to add
skip-character-set-client-handshake directive after
[mysqld]
default-character-set=utf8
