(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
Estilo por procesos
Abre una conexión al servidor MySQL que este funcionando.
Parámetros
- host
-
Puede ser tanto un nombre de host o una dirección IP. Pasando el valor NULL o la cadena "localhost" a este parametro, se asume que será el host local. Cuando sea posible, se utilizaran tuberías en lugar del protocolo TCP/IP.
Anteponiendo al host con p: se abrirá una conexión persistente. mysqli_change_user() será llamada automáticamente en conexiones abiertas desde la agrupación de conexiones.
- username
-
Nombre de usuario de MySQL.
- passwd
-
Si no se facilita o es NULL, el servidor MySQL intentará autenticar el usuario contra el registro de usuarios sin contraseña. Esto permite que un usuario sea utilizado con diferentes permisos (según si la contraseña ha sido facilitada o no).
- dbname
-
Si se facilita indicará base de datos por defecto que será usada cuando se realicen consultas.
- port
-
Especifica el numero del puerto donde se intentará la conexión al servidor MySQL.
- socket
-
Especifica el socket o la tubería nombrada para ser usada.
Note:
Especificando el parámetro socket no se determinará explícitamente el tipo de conexión que será usada cuando se conecte al servidor MySQL. Como se realiza la conexión a la base de datos MySQL está determinado por el parametro host.
Valores devueltos
Devuelve un objeto que representa la conexión a un servidor MySQL.
Historial de cambios
| Versión | Descripción |
|---|---|
| 5.3.0 | Añadida la capacidad de realizar conexiones persistentes. |
Ejemplos
Example #1 mysqli::__construct() example
Estilo orientado a objetos
<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
/*
* This is the "official" OO way to do it,
* BUT $connect_error was broken until PHP 5.2.9 and 5.3.0.
*/
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
/*
* Use this instead of $connect_error if you need to ensure
* compatibility with PHP versions prior to 5.2.9 and 5.3.0.
*/
if (mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo 'Success... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
Estilo orientado a objetos cuando se esté heredando de la clase mysqli
<?php
class foo_mysqli extends mysqli {
public function __construct($host, $user, $pass, $db) {
parent::__construct($host, $user, $pass, $db);
if (mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
}
$db = new foo_mysqli('localhost', 'my_user', 'my_password', 'my_db');
echo 'Success... ' . $db->host_info . "\n";
$db->close();
?>
Estilo por procesos
<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
if (!$link) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo 'Success... ' . mysqli_get_host_info($link) . "\n";
mysqli_close($link);
?>
El resultado de los ejemplos serían:
Success... MySQL host info: localhost via TCP/IP
Notas
Note:
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.
Libmysql 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().
Note:
Solo para sintaxis orientada a objetos: Si una conexión falla se seguirá devolviendo un objeto. Para comprobar si la conexión ha fallado utiliza la función mysqli_connect_error() o la propiedad mysqli->connect_error como en los ejemplos anteriores.
Note:
Si es necesario configurar opciones, como el tiempo de espera, en su lugar puede utilizar la función mysqli_real_connect().
Note:
Llamar al constructor sin ningún parámetro es equivalente a llamar a la función mysqli_init().
Note:
Error "Can't create TCP/IP socket (10106)" / "no se puede crear un socket TCP/IP (10106)" suele significar que la directiva de configuración variables_order no contiene el caracter E. En Windows si no esta copiada la variable de entorno SYSTEMROOT PHP tendrá problemas para ejecutar Winshock.
Ver también
- mysqli_real_connect() - Opens a connection to a mysql server
- mysqli_options() - Set options
- 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.
To specify charset in my.cnf file you just have to add
skip-character-set-client-handshake directive after
[mysqld]
default-character-set=utf8
