<?php
$host = '127.0.0.1';
$db = 'test';
$user = 'root';
$pass = '123456';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
echo '連線成功';
} catch (PDOException $e) {
die('連線失敗:' . $e->getMessage());
}
$mysqli = new mysqli('127.0.0.1', 'root', '123456', 'test', 3306);
if ($mysqli->connect_errno) {
die('連線失敗:' . $mysqli->connect_error);
}
$mysqli->set_charset('utf8mb4');
// PDO
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_PERSISTENT => true,
// 其他選項...
]);
// mysqli
$mysqli = new mysqli('p:127.0.0.1', 'root', '123456', 'test');
注意:長連線會重用進程連線,減少建立開銷,但可能導致連線數耗盡、狀態殘留(如交易未提交),高併發需謹慎評估。
charset=utf8mb4(PDO)$mysqli->set_charset('utf8mb4')(mysqli)utf8mb4_unicode_ci| 模式 | PDO | mysqli |
|---|---|---|
| 例外模式(推薦) | PDO::ERRMODE_EXCEPTION | mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) |
| 警告模式 | PDO::ERRMODE_WARNING | 預設行為 |
| 靜默模式 | PDO::ERRMODE_SILENT | mysqli_report(MYSQLI_REPORT_OFF) |
class Database {
private static $pdo = null;
public static function getConnection() {
if (self::$pdo === null) {
$dsn = "mysql:host=127.0.0.1;dbname=test;charset=utf8mb4";
self::$pdo = new PDO($dsn, 'root', '123456', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
}
return self::$pdo;
}
}
// 使用
$pdo = Database::getConnection();
原始來源:www.111cn.net