使用工厂模式连接php和mysql的核心做法是创建一个静态工厂类,通过一个统一的方法接收配置参数并返回pdo实例。调用时只需传入数据库主机、用户名、密码和库名,工厂内部负责处理连接字符串拼接、异常捕获及单例复用,从而在业务代码中实现无感知的数据库获取。

如何封装PDO实例的创建逻辑
将PDO的初始化过程封装在工厂类的静态方法中,可以避免在每个脚本文件中重复编写连接代码。该方法接收必要的连接参数,构建DSN字符串,并尝试建立连接。如果连接失败,则抛出标准的PDOException,确保错误能被上层统一处理。这种设计让业务层只关注数据操作,而不关心底层连接的细节。

$config = [
'host' => '127.0.0.1',
'dbname' => 'test_db',
'user' => 'root',
'pass' => ''
];
try {
$pdo = DatabaseFactory::getPdo($config);
echo "Connection successful";
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
如何处理连接池或单例复用
在实际应用中,频繁创建和销毁数据库连接会消耗资源。工厂模式可以通过静态属性保存已创建的PDO实例,实现简单的单例效果。当再次请求连接时,先检查实例是否存在且有效,若存在则直接返回,否则重新创建。这种方式在保证线程安全的前提下,提高了连接复用率。
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。

class DatabaseFactory {
private static $instance = null;
public static function getPdo(array $config) {
if (self::$instance === null) {
$dsn = "mysql:host={$config['host']};dbname={$config['dbname']}";
self::$instance = new PDO($dsn, $config['user'], $config['pass']);
self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return self::$instance;
}
}
当传入空配置数组时会发生什么
如果调用工厂方法时传入空的配置数组,由于缺少必需的`host`和`dbname`键,构建DSN字符串时会触发PHP的未定义索引警告,进而导致PDO构造函数因格式错误的DSN而抛出异常。工厂内部的try-catch块会捕获该异常,但不会静默处理,而是将其向上抛出,迫使调用者提供正确的配置信息。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










