pdo-factory/pdo-factory

使用外部配置文件中的凭据创建 PDO 对象的工厂类

v1.0.1 2018-08-06 02:00 UTC

This package is not auto-updated.

Last update: 2024-09-29 06:25:36 UTC


README

概述

PHP 脚本

<?php
  $pdoFactory = new PdoFactory('etc/databases.ini');

  $pdo = $pdoFactory->createPDO('server1');
  
  $pdo->prepare('select * from table1');
  
  ...

数据库配置文件 etc/databases.ini

[server1]
driver=pgsql
host=localhost
dbname=db
username=user
password='secret password'

概览

pdo-factory 允许您将数据库连接信息存储在代码库之外单独的文件中,包括用户名和密码。由于它们是单独的文件,因此可以将其从版本控制中排除,并且可以针对开发、测试或生产使用不同的连接信息。

配置格式简单,直接与 PDO 驱动程序支持的配置选项相关。您还可以指定可以分配给连接的 PDO 属性

该库也是框架无关的,这意味着您可以在任何项目中实现它,无论大小。

安装

要安装,只需执行常规操作

$ composer require pdo-factory/pdo-factory

用法

以下解释了 API 以及如何使用该库。

构造函数

public function __construct(string $source = 'etc/pdofactory.ini')

构造函数接受一个参数,即存储所有连接信息的配置文件路径。如果提供的是相对路径,则库将尝试在脚本的路径中定位该文件,如果找不到,将重复向上遍历目录树,直到找到匹配的配置文件。例如,如果指定的路径是 etc/database.ini,而 PHP 脚本的路径是 /www/project/www/index.php,那么 pdo-factory 将使用以下优先顺序进行搜索,直到找到匹配的文件

  1. /www/project/www/etc/database.ini
  2. /www/project/etc/database.ini
  3. /www/etc/database.ini
  4. /etc/database.ini

这非常有用,如果您希望每个项目都有特定的配置文件,可以覆盖更通用的配置文件。这也意味着如果您将项目代码放在不同的位置,您不需要更改配置文件的路径(即它们可以在项目中是相对的)。

一种常见的模式是在项目目录下创建一个 etc 目录,并将您的 pdo-factory 配置文件放在那里。然后按如下方式调用 pdo-factory 的构造函数

$pdoFactory = new PdoFactory('etc/database.ini');

如果您根本不提供路径

$pdoFactory = new PdoFactory();

则默认路径为 etc/pdofactory.ini

配置文件格式

配置文件中可用的配置参数取决于您使用的 PDO 驱动程序。为了方便起见,以下链接到所有受支持的 PDO 数据库驱动程序的特定参数

  1. Postgresql
  2. MariaDB/Mysql
  3. Sqlite
  4. Oracle
  5. MSSQL (SQLSRV)
  6. MSSQL (DBLIB)

要指定参数,您可以选择编码。目前支持 Microsoft INI 文件格式和 JSON 格式。该库是模块化的,因此您可以添加自己的编码格式,例如 YAML、.env 以及适合您项目的任何其他格式。

INI 文件

以下是一个使用 INI 格式配置的示例配置文件,用于 PostgreSQL 数据库

[server1]
driver=pgsql
host=localhost
dbname=db
username=user
password=pass
attribute[PDO::ATTR_TIMEOUT]=30
attribute[PDO::ATTR_ERRMODE]=PDO::ERRMODE_EXCEPTION

JSON 文件

以下是一个使用 JSON 格式配置的相同示例配置文件

{
  "server1": {
    "driver": "pgsql",
    "host": "localhost",
    "dbname": "db",
    "username": "user",
    "password": "pass",
    "attribute": {
      "PDO::ATTR_TIMEOUT": 30,
      "PDO::ATTR_ERRMODE": "PDO::ERRMODE_EXCEPTION"
    }
  }
}

贡献

最欢迎通过 Github 的拉取请求进行贡献。以下是一个现有功能缺失列表,其中大部分都很容易添加。

待办事项

  1. 添加以下驱动程序支持
  • Oracle
  • Mysql/MariaDB
  • MSSQL (DBLIB)
  1. 添加以下编码支持
  • YAML
  • .env
  1. 进一步改进单元测试

许可

版权 (c) 2018 Damien Clark

本软件受Apache License 2.0(以下简称“许可”)许可;除非您遵守许可,否则不得使用此文件。您可以在以下地址获取许可副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可下分发的软件是以“现状”为基础分发的,不提供任何形式的明示或暗示担保。有关许可的权限和限制的具体语言,请参阅许可。