PHP 8.4.2 Released!

PDO::__construct

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDO::__construct Cria uma instância PDO representando uma conexão a um banco de dados

Descrição

public PDO::__construct(
    string $dsn,
    ?string $username = null,
    #[\SensitiveParameter] ?string $password = null,
    ?array $options = null
)

Cria uma instância PDO para representar uma conexão ao banco de dados requisitado.

Parâmetros

dsn

O nome da fonte de dados, ou DSN, que contém a informação requerida para conexão ao banco de dados.

Em geral, um DSN consiste no nome do driver PDO, seguido por dois-pontos, seguido pela sintaxe de conexão específica do driver PDO. Maiores informações estão disponíveis na documentação específica do driver PDO.

O parâmetro dsn suporta três métodos diferentes para especificar os argumentos requeridos para criação de uma conexão de banco de dados:

Invocação do driver

dsn contém o DSN completo.

Invocação de URI

dsn consiste em uri: seguido por uma URI que define a localização de um arquivo contendo a string DSN. A URI pode especificar um arquivo local ou uma URL remota.

uri:file:///caminho/para/arquivodsn

Criação de apelido

dsn consiste em um nome (name) que é mapeado para pdo.dsn.name no php.ini definindo a string DSN.

Nota:

O apelido deve ser definido no php.ini, e não no .htaccess ou no httpd.conf

username

O nome de usuário para a string DSN. Este parâmetro é opcional para alguns drivers PDO.

password

A senha para a srting DSN. Este parâmetro é opcional para alguns drivers PDO.

options

Um array de chave=>valor de opções de conexão específicas do driver.

Erros/Exceções

Uma PDOException é lançada se a tentativa de conexão ao banco de dados requisitado falhar, independente de qual PDO::ATTR_ERRMODE estiver definido.

Exemplos

Exemplo #1 Cria uma instância PDO através de invocação de driver

<?php

$dsn
= 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

$dbh = new PDO($dsn, $user, $password);

?>

Exemplo #2 Cria uma instância PDO através de invocação de URI

O exemplo a seguir assume que o arquivo /usr/local/dbconnect existe com permissões de leitura pelo PHP. O arquivo contém o DSN PDO para conexão a um banco de dados DB2 através do driver PDO_ODBC:

odbc:DSN=SAMPLE;UID=john;PWD=mypass

O script PHP pode então criar uma conexão ao banco de dados simplesmente passando o parâmetro uri: e apontando para a URI do arquivo:

<?php

$dsn
= 'uri:file:///usr/local/dbconnect';
$user = '';
$password = '';

$dbh = new PDO($dsn, $user, $password);

?>

Exemplo #3 Cria uma instância PDO usando um apelido

O exemplo a seguir assume que o php.ini contém a seguinte entrada para habilitar uma conexão ao banco de dados MySQL usando somente o apelido mydb:

[PDO]
pdo.dsn.mydb="mysql:dbname=testdb;host=localhost"
<?php

$dsn
= 'mydb';
$user = '';
$password = '';

$dbh = new PDO($dsn, $user, $password);

?>

adicione uma nota

Notas Enviadas por Usuários (em inglês) 9 notes

up
126
Kiipa at live dot com
11 years ago
To get UTF-8 charset you can specify that in the DSN.

$link = new PDO("mysql:host=localhost;dbname=DB;charset=UTF8");
up
41
subme at interia dot pl
16 years ago
To specify a database connection port use the following DSN string

<?php
$dsn
= 'mysql:dbname=testdb;host=127.0.0.1;port=3333';
?>
up
8
Aymeric S
4 years ago
When trying to connect to a local database, it seems "uri:file:///" is no longer needed. Just write the PDO pilot name followed by the absolute path of the file.
Example : sqlite:C:\VirtualHosts\phpliteadmin\dbs\surveillance_logeas.s3DB
up
29
piotrekkr at o2 dot pl
14 years ago
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.
up
20
daviddlavier at gmail dot com
9 years ago
I'd like to point out that in PHP 7.0 in the dsn parameter you can't use 'host=localhost' to solve this you can use 'host=127.0.0.1' instead.
up
4
theking2 at king dot ma
1 year ago
A generic pattern to connect to a mariadb or mysql database using a settings file

<?php
$_SETTINGS
= parse_ini_file('./settings.ini', true);

$db = new \PDO(
"mysql:hostname={$_SETTINGS['db']['host']};dbname={$_SETTINGS['db']['name']}",
$_SETTINGS['db']['user'],
$_SETTINGS['db']['pass'],
[
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'"
]
);
?>
You might not need the options depicted here but I find them convenient.

Works with a settings.ini file containing for instance:
[db]
host = "localhost"
name = "dbname"
user = "dbuser"
pass = "dbpassword"
up
10
Francesco Montanari
4 years ago
Most of the information in the comment here is outdated or wrong.

You do can use host=localhost to connect via socket, which is faster than TCP, so setting 127.0.0.1 is a performance loss.

To use proper utf you should use utf8mb4, for example:

$db = new PDO('mysql:host=' . DATABASE_HOST . ';dbname='. DATABASE_NAME .';charset=utf8mb4', DATABASE_USER, DATABASE_PASSWORD);
up
2
Michal Stefanak
2 years ago
If you override PDO with own class and you want to implement alias from php.ini, you have to get it with `get_cfg_var` instead of `ini_get`.

<?php
class PDO extends \PDO
{
public function
__construct(string $dsn, ?string $username = null, ?string $password = null, ?array $options = null)
{
//alias
if (!str_contains($dsn, ':')) {
$dsn = get_cfg_var('pdo.dsn.' . $dsn);
if (!
$dsn) {
throw new
PDOException('Argument #1 ($dsn) must be a valid data source name');
}
}

// your additional logic

parent::__construct($dsn, $username, $password, $options);
}
}
?>
up
14
Victor T.
14 years ago
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 Top