To connect throught unix socket you need to use
<?php
$dsn = 'mysql:dbname=testdb;unix_socket=/path/to/socket';
?>
You musn't specify host when using socket.
PDO::__construct
(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
PDO::__construct — Crea una instancia de PDO representando una conexión a la base de datos
Descripción
$dsn
[, string $username
[, string $password
[, array $driver_options
]]] )Crea una instancia de PDO para representar una conexión a la base de datos solicitada.
Parámetros
- dsn
-
EL nombre de origen de datos (DSN, Data Source Name en inglés), contiene la información requerida para conectarse a la base de datos.
En general, un DSN consiste en el nombre del driver PDO, seguido por dos puntos, seguido por la sintaxis específica del driver PDO para la conexión. Más información está disponible en la documentación específica del driver PDO.
El parámetro
dsnsoporta tres métodos diferentes para especificar los parámetros requeridos para crear la conexión a la base de datos:- Invocación del driver
-
dsncontiene el DSN completo. - URI invocation
-
dsnestá formado poruri:seguido por un URI que define la ubicación de un archivo que contiene una cadena con el DSN. El URI puede especificar un archivo local o una URL remota.uri:file:///path/to/dsnfile - Aliasing
-
dsnestá formado por un nombrenameque mapea apdo.dsn.en php.ini definido en la cadena de DSN.nameNota:
El alias debe estar definido en php.ini, y no en .htaccess o httpd.conf
- username
-
El nombre de usuario para la cadena DSN. Este parámetro es opcional para algunos drivers PDO.
- password
-
La contraseña para la cadena DSN. Este parámetro es opcional para algunos drivers PDO.
- driver_options
-
Un array de la forma clave=>valor con opciones específicas del driver para la conexión.
Valores devueltos
Devuelve un objeto PDO en caso de éxito.
Errores/Excepciones
PDO::__construct() lanza una PDOException si el intento de conexión a la base de datos requerida falla.
Ejemplos
Ejemplo #1 Crea una instancia PDO a través de una invocación del driver
<?php
/* Conectar a una base de datos ODBC invocando al driver */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
Ejemplo #2 Crear una instancia PDO a través de un URI
El siguiente ejemplo asume que el archivo /usr/local/dbconnect existe, con los permisos necesarios para que PHP lea el archivo. Éste contiene el DSN para el PDO necesario para conectarse a una base de datos DB2 a través de un driver PDO_ODBC:
odbc:DSN=SAMPLE;UID=john;PWD=mypass
El programa PHP puede crear una conexión a una base de datos simplemente pasando el parámetro uri: y apuntando al fichero URI:
<?php
/* Conectar a la base de datos ODBC invocando al driver */
$dsn = 'uri:file:///usr/local/dbconnect';
$user = '';
$password = '';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
Ejemplo #3 Crea una instancia de PDO usando un alias
El siguiente ejemplo asume que php.ini contiene la siguiente entrada para permitir la conexión a una base de datos MySQL usando sólo el alias mydb:
[PDO] pdo.dsn.mydb="mysql:dbname=testdb;host=localhost"
<?php
/* Conectar a la base de datos ODBC invocando al driver */
$dsn = 'mydb';
$user = '';
$password = '';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
You have to use the following option "MYSQL_ATTR_READ_DEFAULT_FILE" to prevent someone from attacking your system by SQL Injection.
<?php
$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME;
$dbh = new PDO(
$dsn,
DB_USER,
DB_PASS,
array(
PDO::MYSQL_ATTR_READ_DEFAULT_FILE => '/etc/my.cnf'
)
);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
?>
If you use the UTF-8 encoding, you have to use the fourth parameter :
<?php
$db = new PDO('mysql:host=myhost;dbname=mydb', 'login', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
?>
To specify a database connection port use the following DSN string
<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1;port=3333';
?>
