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 — Connexion aux bases de données MySQL
Le Data Source Name (DSN) de PDO_MYSQL est composé des éléments suivants :
Le préfixe DSN est mysql:
.
host
L'hôte sur lequel le serveur de base de données se situe.
port
Le numéro de port où le serveur de base de données est en train d'écouter.
dbname
Le nom de la base de données.
unix_socket
Le socket Unix MySQL (ne devrait pas être utilisé avec
host
ou port
).
charset
Le jeu de caractères. Voir la documentation sur les concepts des jeux de caractères pour plus d'informations.
Exemple #1 Exemples avec le DSN de PDO_MYSQL
L'exemple suivant montre le DSN PDO_MYSQL pour se connecter aux bases de données MySQL :
mysql:host=localhost;dbname=testdb
mysql:host=localhost;port=3307;dbname=testdb mysql:unix_socket=/tmp/mysql.sock;dbname=testdb
Note: Unix seulement:
Lorsque le nom d'hôte est
"localhost"
, la connexion est faite par un socket Unix. Si PDO_MYSQL est compilé aveclibmysqlclient
, alors le fichier de socket est celui précisé à la compilation delibmysqlclient
. Si PDO_MYSQL est compilé avecmysqlnd
, un socket par défaut peut être indiqué via la paramètre 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
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);
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
));
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
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);
?>
$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;
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