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.
(PECL PDO_MYSQL >= 0.1.0)
PDO_MYSQL DSN — Соединение с базой данных MySQL
Имя источника данных (Data Source Name или DSN) PDO_MYSQL состоит из следующих элементов:
DSN-префикс - это mysql:
.
host
Имя хоста, где находится сервер баз данных.
port
Номер порта, который слушает сервер баз данных.
dbname
Имя базы данных.
unix_socket
Сокет MySQL Unix (не должен использоваться совместно с host
или port
).
charset
Кодировка. Смотрите раздел Кодировки для дополнительной информации.
Пример #1 Примеры DNS для PDO_MYSQL
Следующие примеры показывают использование PDO_MYSQL DSN для соединения с базой данных MySQL:
mysql:host=localhost;dbname=testdb
mysql:host=localhost;port=3307;dbname=testdb mysql:unix_socket=/tmp/mysql.sock;dbname=testdb
Замечание: Только Unix:
Если имя хоста установлено как
"localhost"
, то соединение происходит через сокет домена. Если PDO_MYSQL скомпилирован с использованием libmysqlclient, то путь к файлу-сокета будет совпадать с путём, по которому скомпилирован libmysqlclient. Если PDO_MYSQL скомпилирован с использованием mysqlnd, значение сокета по умолчанию, может быть выставлено с использованием настройки pdo_mysql.default_socket.
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.
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
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
));
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);
?>
<?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;
}
};
?>
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);
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
$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;