PHP 8.3.4 Released!

PDO_MYSQL DSN

(PECL PDO_MYSQL >= 0.1.0)

PDO_MYSQL DSNConectarse a bases de datos de MySQL

Descripción

El Nombre de Origen de Datos (DSN) de PDO_MYSQL está compuesto por los siguientes elementos:

prefijo DSN

El prefijo DSN es mysql:.

host

El nombre del equipo anfitrión donde reside el servidor de bases de datos.

port

El número de puerto que el servidor de bases de datos está escuchando.

dbname

El nombre de la base de datos.

unix_socket

El socket Unix de MySQL (no debe usarse con host o port).

charset

El conjunto de caracteres. Véase la documentación sobre los conceptos de conjuntos de caracteres para más información.

Antes de PHP 5.3.6, este elemento era ignorado de forma silenciosa. Se puede replicar el mismo comportamiento parcialmente con la opción PDO::MYSQL_ATTR_INIT_COMMAND del controlador, como muestra el siguiente ejemplo.

Advertencia

El método del siguiente ejemplo sólo puede usarse con juegos de caracteres que compartan una misma represntación ASCII de los 7 últimos bits, como ISO-8859-1 o UTF-8. Los usuarios que utilicen juegos de caracteres con representaciones distintas (como UTF-16 o Big5) deben usar la opción charset que ofrece la versión 5.3.6 de PHP y posterior.

Ejemplo #1 Establecer el juego de caracteres de la conexión a UTF-8, antes de PHP 5.3.6

<?php
$dsn
= 'mysql:host=localhost;dbname=testdb';
$nombre_usuario = 'nombre_usuario';
$contraseña = 'contraseña';
$opciones = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);

$gbd = new PDO($dsn, $nombre_usuario, $contraseña, $opciones);
?>

Historial de cambios

Versión Descripción
5.3.6 Antes de la versión 5.3.6, charset era ignorado.

Ejemplos

Ejemplo #2 ejemplos PDO_MYSQL DSN

El siguiente ejemplo muestra un DSN de PDO_MYSQL para conectarse a una base de datos de MySQL:

mysql:host=localhost;dbname=testdb
Más ejemplos completos:
mysql:host=localhost;port=3307;dbname=testdb
mysql:unix_socket=/tmp/mysql.sock;dbname=testdb

Notas

Nota: Unix solamente:

Cuando el nombre de equipo anfitrión está definido como "localhost", la conexión al servidor se realiza a través de un socket de dominio. Si PDO_MYSQL se compila para libmysqlclient, entonces la ubicación del fichero del socket será la ubicación donde se compiló libmysqlclient. Si PDO_MYSQL se compila para mysqlnd, se puede establecer un socket predeterminado a través del ajuste pdo_mysql.default_socket.

add a note

User Contributed Notes 8 notes

up
37
codeslinger at compsalot dot com
15 years ago
I have tested this and found that the "dbname" field is optional. Which is a good thing if you must first create the db.

After creating a db be sure to exec a "use dbname;" command, or else use fully specified table references.
up
7
rhian
7 years ago
xwisdom made a mistake in his comment and got it backwards, correction below:

If you are having problems accessing a remote MYSQL database, the solution is to make sure that you add a white-space after "mysql:"

Change this...:
mysql:host=remote;

...to this:
mysql: host=remote;

See original solution here:
http://stackoverflow.com/a/25432156
up
0
anrdaemon at yandex dot ru
2 years ago
Wrappers may add support for extra parameters in the DSN, which are ignored by PDO itself, but facilitate more fine-grained connection setup.

F.e. localization (particularly LC_TIME) and timezones support.

https://github.com/AnrDaemon/library-php/blob/335e9e58f22cca8c185b35cf201ad0a367ae4c9f/src/Wrappers/PDOMysql.php#L54-L69
up
0
FireDev
4 years ago
The best way for me

$bdd= new PDO("mysql:host=localhost;dbname=test_db;charset=UTF8", "username", "password");
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
up
0
siguza at siguza dot net dot IGNORETHIS
9 years ago
It should be noted that unix_socket can also be used for named pipes under Windows.

<?php
$pipeName
= 'my_awesome_pipe';
$username = 'username';
$password = 'password';
$dbh = new PDO('mysql:unix_socket='.$pipeName, $username, $password);
?>
up
-1
divinity76 at gmail dot com
4 years ago
here is the example i prefer myself, in my opinion, this is almost always "the correct way" to do it:
<?php

$db
= new \PDO('mysql:host=localhost;dbname=testdb;charset=utf8mb4', 'username', 'password', array(
\PDO::ATTR_EMULATE_PREPARES => false,
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
));
up
-6
yuqiangliu at outlook dot com
4 years ago
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);

SET NAMES utf8 is equivalent to

SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
up
-15
xwisdom at gmail dot com
8 years ago
If you are having problems accessing a remote MYSQL database, the solution is to make sure that you remove any white-space after "mysql:"

Change this...:
mysql: host=remote;

...to this:
mysql:host=remote;

See original solution here:
http://stackoverflow.com/a/25432156
To Top