Files
FamilyBook/app/Database.php
T

55 lines
1.4 KiB
PHP
Raw Normal View History

<?php
/**
* 数据库:PDO 单例。
* 只依赖 config.php 里的 db 配置,方言差异集中在这里。
*/
declare(strict_types=1);
namespace App;
use PDO;
final class Database
{
/** @var PDO|null */
private static $pdo = null;
public static function get(): PDO
{
if (self::$pdo instanceof PDO) {
return self::$pdo;
}
$c = $GLOBALS['config']['db'];
$dsn = sprintf(
'mysql:host=%s;port=%d;dbname=%s;charset=%s',
$c['host'],
$c['port'],
$c['name'],
$c['charset']
);
self::$pdo = new PDO($dsn, $c['user'], $c['pass'], [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
return self::$pdo;
}
/** 表是否存在(安装判定用,不依赖异常) */
public static function hasTables(): bool
{
try {
$st = self::get()->prepare(
'SELECT COUNT(*) FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name IN
(\'families\',\'persons\',\'accounts\',\'settings\')'
);
$st->execute();
return (int)$st->fetchColumn() === 4;
} catch (\Throwable $e) {
return false;
}
}
}