PDO_MYSQL DSN

(PECL PDO_MYSQL >= 0.1.0)

PDO_MYSQL DSNConectando a bancos de dados MySQL

Descrição

O PDO_MYSQL Data Source Name (DSN) é composto dos seguintes elementos:

DSN prefix

O prefixo DSN é mysql:.

host

O hostname no qual o servidor do banco de dados está.

port

O número da porta onde o servidor do banco de dados está escutando.

dbname

O nome do banco de dados.

unix_socket

O socket Unix do MySQL (não deve ser usado com host ou port).

charset

O character set. Veja a documentação de character set para mais informações.

Em versões anteriores ao PHP 5.3.6, esse elemento era ignorado de forma silenciosa. O mesmo comportamente pode ser parcialmente replicado com a opção PDO::MYSQL_ATTR_INIT_COMMAND, assim como o exemplo a seguir demonstra.

Aviso

O método no exemplo abaixo pode ser usado com os character sets que compartilham a mesma representação que ASCII nos 7 bits mais baixos, como ISO-8859-1 e UTF-8. Usuários utilizando character sets que possuem diferentes representações (como UTF-16 ou Big5) devem usar a opção charset disponível no PHP 5.3.6 e versões posteriores.

Exemplo #1 Configurando o character set como UTF-8 antes do PHP 5.3.6

<?php
$dsn 
'mysql:host=localhost;dbname=testdb';
$username 'username';
$password 'password';
$options = array(
    
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
); 

$dbh = new PDO($dsn$username$password$options);
?>

Changelog

Versão Descrição
5.3.6 Antes do PHP 5.3.6, o charset era ignorado.

Exemplos

Exemplo #2 PDO_MYSQL DSN examples

O exemplo a seguir demonstra um PDO_MYSQL DSN para conexão com banco de dados MySQL:

mysql:host=localhost;dbname=testdb
Exemplos mais completos:
mysql:host=localhost;port=3307;dbname=testdb
mysql:unix_socket=/tmp/mysql.sock;dbname=testdb

Notas

Nota: Somente em Unix:

Quando o hostname é definido como "localhost", a conexão ao servidor é feita através de um socket de domínio. Se o PDO_MYSQL é compilado usando libmysqlclient, a localização do socket é a mesma localização da compilação de libmysqlclient. Se PDO_MYSQL foi compilado usando mysqlnd, um socket padrão pode ser definido através da configuração pdo_mysql.default_socket.

add a note add a note

User Contributed Notes 8 notes

up
31
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
9
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
3
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
2
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
0
Thyago Frana
3 years ago
<?php
   
Class Conexao {
        private
$host = "127.0.0.1"; // boa pratica começar a usar ip no lugar de localhost
       
private $user = "root";
        private
$pass = "";
        private
$database = "sistema_login";

        public function
conectar() {

            try{
               
$conexao = new PDO("mysql:host=$this->host;dbname=$this->database;charset=utf8", $this->user, $this->pass);
               
$conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            }catch(
PDOException $erro) {
                echo
"Erro ao tentar se conectar com o Banco de Dados: {$erro->getMessage()}"; //{$erro->getMessage()} esta concatenando
               
$conexao = null;
            }

            return
$conexao;
        }
    };  
?>
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
-7
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
up
-4
yuqiangliu at outlook dot com
5 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;
To Top