rotexsoft / sqlschema
提供使用PDO从数据库读取表名和列的功能。此包是基于 https://packagist.org.cn/packages/aura/sqlschema ( https://github.com/auraphp/Aura.SqlSchema ) 的分支。它添加了PHP 8.1+支持,并设计用于与Mariadb 10.4+及以上版本一起工作。
Requires
- php: >=8.1.0
Requires (Dev)
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^10.5
- rector/rector: ^0.19.8
- vimeo/psalm: ^5.22.1
This package is auto-updated.
Last update: 2024-08-25 23:12:36 UTC
README
通过PDO连接从数据库读取表名和列的功能。
前言
此分支已经针对与MariaDB兼容进行了优化,而Aura.SqlSchema不支持MariaDB。此分支已在以下数据库上进行了测试
- Mariadb 10.4.x, 10.5.x, 10.6.x, 10.11.x, 11.0.x, 11.1.x & 11.2.x
- Mysql 5.6, 5.7, 8.0.x & 8.3.x
- Postgres 12.x, 13.x, 14.x, 15.x & 16.x
将来将进行一些工作,以确保它与Microsoft Sql Server兼容
安装
此库需要PHP 8.1或更高版本;我们原则上建议使用最新可用的PHP版本。它没有用户空间依赖。
可以通过Composer安装和自动加载,作为 rotexsoft/sqlschema。
或者,下载一个版本或克隆此仓库,然后要求或包含其 autoload.php 文件。
质量
要在命令行中运行单元测试,在包根目录下运行 phpunit
。(这需要 PHPUnit 作为 phpunit
可用。)
此库试图遵守 PSR-1、PSR-2 和 PSR-4。如果您注意到遵守上的疏忽,请通过拉取请求发送补丁。
分支
以下是此仓库中的分支
-
2.x: 对应于原始 Aura.SqlSchema 仓库中的 2.x 分支。没有计划积极维护此分支,但它可以与 Aura.SqlSchema 仓库 同步(即,可以拉入该仓库中 2.x 分支的变化)。
-
php-8-deprecation-fixes: 此分支从 2.x 分支开始,包含使代码库符合PHP 8.1+和将最低PHP版本提高到8.1的更改。它原本打算作为要提交给 Aura.SqlSchema 仓库 的分支。请参阅 auraphp#22
-
rotexsoft-3.x: 此分支从 php-8-deprecation-fixes 分支开始。由于以下更改,它不再与原始 Aura.SqlSchema 包 兼容
- 将 Aura\SqlSchema 命名空间更改为 Rotexsoft\SqlSchema
- 在代码库中应用了更严格的类型提示,导致接口方法签名的一些更改。
这将是一个分支,其中包含 rotexsoft/sqlschema 版本 3.x 的代码。
未来还将有类似 rotexsoft-4.x 的分支,用于 4.x 及以上版本。
测试
如果您至少运行过一次 composer update 或 composer install 命令,则应该有一个 ./phpunit.xml 文件。
编辑 ./phpunit.xml 以包含 MySql 和 Postgres 的正确数据库连接信息,或者注释掉 MySql 和 Postgres 变量以仅针对 Sqlite 进行测试,然后运行以下命令进行测试:
./vendor/bin/phpunit
如果您正在运行已安装 podman 的 Linux 操作系统,您可以使用 ./run-tests-against-multiple-db-versions.php 脚本对 MariaDB、MySql 和 Postgres 的多个版本进行更广泛的测试。
入门指南
实例化
使用匹配的 PDO 实例实例化特定驱动程序的 schema 对象
<?php use Rotexsoft\SqlSchema\ColumnFactory; use Rotexsoft\SqlSchema\MysqlSchema; // for MySQL use Rotexsoft\SqlSchema\PgsqlSchema; // for PostgreSQL use Rotexsoft\SqlSchema\SqliteSchema; // for Sqlite use Rotexsoft\SqlSchema\SqlsrvSchema; // for Microsoft SQL Server use PDO; // a PDO connection $pdo = new PDO(...); // a column definition factory $column_factory = new ColumnFactory(); // the schema discovery object $schema = new MysqlSchema($pdo, $column_factory); ?>
获取表列表
要获取数据库中的表列表,请执行 fetchTableList()
<?php $tables = $schema->fetchTableList(); foreach ($tables as $table) { echo $table . PHP_EOL; } ?>
获取列信息
要获取表中列的信息,请执行 fetchTableCols()
<?php $cols = $schema->fetchTableCols('table_name'); foreach ($cols as $name => $col) { echo "Column $name is of type " . $col->type . " with a size of " . $col->size . PHP_EOL; } ?>
每个列描述都是一个具有以下属性的 Column
对象
-
name
: (string) 列名称 -
type
: (string) 列数据类型。数据类型如数据库所报告。 -
size
: (int) 列大小。 -
scale
: (int) 列的十进制位数,如果有。 -
notnull
: (bool) 列被标记为NOT NULL
吗? -
default
: (mixed) 列的默认值。请注意,有时这可能为null
,如果基础数据库将自动设置时间戳。 -
autoinc
: (bool) 列是自动递增的吗? -
primary
: (bool) 列是主键的一部分吗?