PDO (PHP Data Objects) 使用 DSN (Data Source Name) 字符串來定義數據庫連接參數。不同數據庫驅動程序的 DSN 格式各不相同,本文匯總了主流數據庫的標準寫法,供開發者快速查閱。
mssql:host=localhost;dbname=testdb sybase:host=localhost;dbname=testdb dblib:host=localhost;dbname=testdb
firebird:User=john;Password=mypass;Database=DATABASE.GDE;DataSource=localhost;Port=3050
DRIVER={IBM DB2 ODBC DRIVER};DATABASE=database;HOSTNAME=hostname;PORT=port;PROTOCOL=TCPIP;UID=username;PWD=password;
informix:host=host.domain.com;service=9800;database=common_db;server=ids_server;protocol=onsoctcp;EnableScrollableCursors=1
# TCP/IP 連接 mysql:host=localhost;port=3307;dbname=testdb # Unix Socket 連接(本機高性能) mysql:unix_socket=/tmp/mysql.sock;dbname=testdb
oci:dbname=//localhost:1521/mydb
# 系統 DSN
odbc:testdb
# 無 DSN 連接 IBM DB2
odbc:DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME=localhost;PORT=50000;DATABASE=SAMPLE;PROTOCOL=TCPIP;UID=db2inst1;PWD=ibmdb2;
# Microsoft Access
odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\db.mdb;Uid=Admin
pgsql:host=localhost port=5432 dbname=testdb user=bruce password=mypass
# SQLite 3 文件數據庫 sqlite:/opt/databases/mydb.sq3 sqlite::memory: # 內存數據庫 # SQLite 2 sqlite2:/opt/databases/mydb.sq2 sqlite2::memory:
charset=utf8mb4(PDO::MYSQL_ATTR_INIT_COMMAND 替代方案)。persistent: 可啟用持久連接,如 mysql:host=...;dbname=...;persistent=true。$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);。$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 以提升安全性與性能。try {
$dsn = 'mysql:host=127.0.0.1;port=3306;dbname=myapp;charset=utf8mb4';
$pdo = new PDO($dsn, 'username', 'password', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
echo "連接成功";
} catch (PDOException $e) {
die("連接失敗: " . $e->getMessage());
}