jpuck / qdbp
PHP快速数据库
Requires
- php: ^7.0
- ircmaxell/random-lib: ^1.2
- jpuck/phpdev: ^1.4
- symfony/console: ^3.1
README
PHP7命令行控制台应用程序,用于创建/删除数据库和用户以及执行SQL脚本列表。这还将生成一个PHP文件,该文件返回PDO实例。
目前支持使用UTF-8字符集和utf8_unicode_ci校对创建MySQL环境。
清除命令适用于Microsoft SQL Server。
请在Github问题页面上报告所有错误。
环境
- 开发
- 拥有所有权限的用户
- 测试质量保证
- 拥有所有权限的用户
- 只有存储过程执行权限的用户
- 生产
- 只有存储过程执行权限的用户
命名模式
数据库名称以您选择的最多7个字符开头,并以随机生成的5个字符标识符结尾。ID的第一个字母指定其环境D
(开发)、T
(测试)或P
(生产)。
这允许您在同一个服务器上轻松启动用于开发和测试的替代环境而不会发生冲突。
用户名与数据库名称相同,以_A
或_E
结尾以指定权限(所有或执行)。以_A
结尾的特权帐户(用户ALL)用于开发和测试中的DDL。仅执行帐户由_E
(用户EXECUTE)指定,并用于测试和生产。这遵循最小权限原则,其中所有DML都封装在显式的参数化存储过程中。
名称限制为7个字符的原因是,直到MySQL 5.7.8,用户名只能长16个字符。现在它们可以是32个字符,但该应用程序目前限制为向后兼容。
示例
- 开发
- 数据库:
example_D4JAOb
- 特权用户:
example_D4JAOb_A
- 数据库:
- 测试
- 数据库:
example_TzWwAo
- 特权用户:
example_TzWwAo_A
- 应用程序用户:
example_TzWwAo_E
- 数据库:
- 生产
- 数据库:
example_PNITvJ
- 应用程序用户:
example_PNITvJ_E
- 数据库:
生成的PHP文件将返回PDO实例,如下所示
<?php return call_user_func(function(){ $hostname = 'localhost'; $database = 'example_D4JAOb'; $username = 'example_D4JAOb_A'; $password = '8is+G?Gkg.BNW_}9B5kmjPyr02G~Z2lO'; $pdo = new PDO("mysql:host=$hostname; charset=UTF8; dbname=$database", $username, $password ); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $pdo; });
匿名函数允许轻松包含在任何PHP脚本中,而不会与变量名冲突。
<?php $pdo = require __DIR__.'/example_D4JAOb_A.pdo.php'; $sql = 'SELECT * FROM Users'; $array = $pdo->query($sql)->fetchAll();
入门指南
在packagist上注册,以便使用composer轻松进行全局安装。
composer global require jpuck/qdbp
请确保您的$PATH
包含全局bin目录,因为composer不会自动修改您的$PATH
变量。但是,composer会告诉您全局bin目录的位置。
composer global config bin-dir --absolute
然后您可以将该位置添加到您的shell配置文件或rc文件中,以便始终可用。例如,如果您正在运行Ubuntu 16.04和bash,则这可能有效
echo 'export PATH="$PATH:$HOME/.config/composer/vendor/bin"' >> ~/.bashrc
安装后,运行不带任何参数以查看命令列表。
qdbp
使用任何命令的-h
标志以获取使用说明。
qdbp <command> -h
示例
在本地主机上创建一个名为 dbname
的 开发 环境
qdbp create -e dev dbname
在位于 mysql.example.com 的服务器上创建一个名为 dbname
的 生产 环境
qdbp create -e prod -H mysql.example.com dbname
执行一个 SQL 脚本
qdbp execute /path/to/ddl.sql
使用生成的凭据文件执行 SQL 脚本
qdbp execute -p /path/to/example_D4JAOb_A.pdo.php /path/to/ddl.sql
执行一系列 SQL 脚本
qdbp execute -p example_D4JAOb_A.pdo.php /path/to/sql.lst
要执行的一系列 SQL 脚本可以包含同一目录中的文件,目录外部的 相对路径 或系统任何位置的 绝对路径。例如,sql.lst
的内容可能如下所示
drop_tables.sql
../ddl.sql
/var/www/project/SQL/stored_procedures.sql