PHP PDO: connexion au serveur MySQL / MariaDB


Exemple

Il existe deux manières de se connecter à un serveur MySQL / MariaDB, selon votre infrastructure.

Connexion standard (TCP / IP)

$dsn = 'mysql:dbname=demo;host=server;port=3306;charset=utf8';
$connection = new \PDO($dsn, $username, $password);

// throw exceptions, when SQL error is caused
$connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
// prevent emulation of prepared statements
$connection->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);

Étant donné que PDO a été conçu pour être compatible avec les anciennes versions de serveur MySQL (qui ne prennent pas en charge les instructions préparées), vous devez désactiver explicitement l'émulation. Sinon, vous perdrez les avantages de prévention d'injection supplémentaires, qui sont généralement accordés à l'aide d'instructions préparées.

Un autre compromis de conception, que vous devez garder à l’esprit, est le comportement de gestion des erreurs par défaut. S'il n'est pas configuré autrement, PDO ne présentera aucune indication d'erreurs SQL.

Il est fortement recommandé de le définir sur "mode exception", car cela vous permet d’obtenir des fonctionnalités supplémentaires lors de l’écriture d’abstractions de persistance (par exemple: avoir une exception en cas de violation de la contrainte UNIQUE ).

Connexion de prise

$dsn = 'mysql:unix_socket=/tmp/mysql.sock;dbname=demo;charset=utf8';
$connection = new \PDO($dsn, $username, $password);

// throw exceptions, when SQL error is caused
$connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
// prevent emulation of prepared statements
$connection->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);

Sur les systèmes de type Unix, si le nom d'hôte est 'localhost' , la connexion au serveur s'effectue via un socket de domaine.