PDO 連線到 MySQLMariaDB 伺服器

有兩種方法可以連線到 MySQL / MariaDB 伺服器,具體取決於你的基礎結構。

標準(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);

由於 PDO 旨在與較舊的 MySQL 伺服器版本(不支援預準備語句)相容,因此必須明確禁用模擬。否則,你將失去通常使用預準備語句授予的額外注入預防益處。

你必須記住的另一個設計折衷方案是預設的錯誤處理行為。如果沒有另外配置,PDO 將不會顯示任何 SQL 錯誤的指示。

強烈建議將其設定為異常模式,因為在編寫永續性抽象時會獲得額外的功能(例如:在違反 UNIQUE 約束時有異常)。

套接字連線

$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);

在類 Unix 系統上,如果主機名是'localhost',那麼與伺服器的連線是通過域套接字實現的。