連線建立後自動執行指定 SQL,重連時同樣執行。常見用途:設定字元集、時區、SQL 模式。
<?php
$dsn = "mysql:host=localhost;dbname=my_db;charset=utf8mb4";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
];
$pdo = new PDO($dsn, 'user', 'pass', $options);
// 連線成功後已自動執行 SET NAMES ...
?>
| 常數 | 用途 | 範例值 |
|---|---|---|
| PDO::MYSQL_ATTR_COMPRESS | 啟用壓縮協議 | true |
| PDO::MYSQL_ATTR_SSL_CA | SSL CA 憑證路徑 | /etc/ssl/ca.pem |
| PDO::MYSQL_ATTR_SSL_CERT | SSL 客戶端憑證 | /etc/ssl/client-cert.pem |
| PDO::MYSQL_ATTR_SSL_KEY | SSL 私鑰 | /etc/ssl/client-key.pem |
| PDO::MYSQL_ATTR_LOCAL_INFILE | 允許 LOAD DATA LOCAL | true/false |
| PDO::MYSQL_ATTR_MAX_BUFFER_SIZE | 緩衝區上限 | 1024*1024 |
| PDO::MYSQL_ATTR_READ_DEFAULT_FILE | 讀取 my.cnf 選項組 | /etc/my.cnf |
| PDO::MYSQL_ATTR_READ_DEFAULT_GROUP | 選項組名稱 | client |
$options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8mb4; SET time_zone = '+08:00';";
charset=utf8mb4 在 DSN 中已設定字元集,INIT_COMMAND 可補充 COLLATE 或時區PDO::ATTR_PERSISTENT 或手動重連邏輯caching_sha2_password,PHP 需 7.2+ 且啟用 PDO::MYSQL_ATTR_SSL_CA 等 SSL 選項才能連線