44 lines
1.0 KiB
PHP
44 lines
1.0 KiB
PHP
<?php
|
|
// 数据库连接(PDO)。被 install 之外的所有页面复用。
|
|
// 安全:禁止被直接通过浏览器请求。
|
|
if (!defined('IN_APP')) {
|
|
http_response_code(403);
|
|
exit('Forbidden');
|
|
}
|
|
|
|
require_once __DIR__ . '/../config.php';
|
|
|
|
/**
|
|
* 返回全局唯一的 PDO 实例(懒加载 + 单例)。
|
|
*/
|
|
function db()
|
|
{
|
|
static $pdo = null;
|
|
if ($pdo !== null) {
|
|
return $pdo;
|
|
}
|
|
$dsn = sprintf(
|
|
'mysql:host=%s;port=%s;dbname=%s;charset=utf8mb4',
|
|
DB_HOST, DB_PORT, DB_NAME
|
|
);
|
|
try {
|
|
$pdo = new PDO($dsn, DB_USER, DB_PASS, [
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
|
PDO::ATTR_EMULATE_PREPARES => false,
|
|
]);
|
|
} catch (PDOException $e) {
|
|
// 不在页面上泄露密码等细节
|
|
die('数据库连接失败,请检查 config.php 中的数据库配置。');
|
|
}
|
|
return $pdo;
|
|
}
|
|
|
|
/**
|
|
* 带前缀的表名。
|
|
*/
|
|
function tn($table)
|
|
{
|
|
return DB_PREFIX . $table;
|
|
}
|