addiks / phpsql
用PHP编写的SQL数据库
Requires
- php: >=5.5.0
Requires (Dev)
- phpunit/phpunit: ~4.0
README
该项目的目标是创建一个完全用PHP编写的SQL兼容数据库。其用途非常广泛
- 它可以用于模拟内存中的临时数据库进行单元测试。
- 开发者可以直接从应用程序调试到数据库中,以了解数据库行为的原因。
- SQL解析器可以用于从外部SQL查询中提取有价值的信息。
- 此数据库不依赖于PHP模块或单独的服务器,只需运行即可。
- 强制通过实践学习目的
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!! !!!
!!! WARNING !!!
!!! !!!
!!! DO NOT USE THIS DATABASE IN PRODUCTION ENVIRONMENT! !!!
!!! !!!
!!! If you do disregard this warning, !!!
!!! you alone are responsible for any damage or data-loss! !!!
!!! !!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
目前,我只将phpsql用作内存数据库。从理论上讲,它也可以在文件系统中工作(对于内存数据库,它模拟内存文件系统),但目前主要未经过测试。
安装
安装PHPSQL有几种方法。推荐的安装方法是使用composer。
使用composer
将以下内容添加到你的 composer.json 的 require 区域
"require": { "addiks/phpsql": "^0.1.0" },
然后使用composer 安装或更新依赖
Git
- 将URL https://github.com/addiks/phpsql.git 克隆到任意目录。
- 在PHP中包含文件 bin/bootstrap.php。
存档下载
- 将URL https://github.com/addiks/phpsql/archive/master.zip 下载到任意目录。
- 在PHP中包含文件 bin/bootstrap.php。
如何使用
PHPSQL提供了一个PDO替代品,应该用于实例化数据库。
此PDO替代品可以使用与PHP的PDO类一样。
<?php use Addiks\PHPSQL\PDO\PDO; use Addiks\PHPSQL\Result\ResultWriter; # create a new database in memory $pdo = new PDO('inmemory:some_example_database'); $pdo->query(" CREATE TABLE foo( id INT PRIMARY KEY AUTO_INCREMENT, bar VARCHAR(32), baz DECIMAL(3,12) ) "); $pdo->query(" INSERT INTO foo (bar, baz) VALUES (?, ?) ", ['Lorem ipsum', 3.1415]); $result = $pdo->query("SELECT * FROM foo"); $rows = $result->fetchAll(PDO::FETCH_NUM); foreach ($rows as $row) { var_dump($row); } # Creates an ASCII-art-table representing a result. echo new ResultWriter($pdo->query('DESCRIBE foo')->getResult());
基准测试
在'bin/benchmark.php'中有一个简单的基准测试脚本,可以比较mysql和phpsql之间的执行速度。目前phpsql没有缓存或其他性能提升措施,这意味着目前它非常慢。在我的机器上,phpsql(使用PHP-5)在插入和选择时仅约为mysql的30%快,并且与插入速度相同
在我的MySQL(InnoDB)上
- opened database 'mysql:host=127.0.0.1;dbname=benchmark'.
- inserting 10000 rows took 19.008 seconds.
- selecting 10000 rows took 0.657 seconds.
在PHP-5.5上
- opened database 'inmemory:benchmark'.
- inserting 10000 rows took 67.782 seconds.
- selecting 10000 rows took 65.639 seconds.
在PHP-7上
- opened database 'inmemory:benchmark'.
- inserting 10000 rows took 8.108 seconds.
- selecting 10000 rows took 7.716 seconds.
如您所见,phpsql极大地受益于使用php-7(向PHP开发者致敬!)。
再次强调:在当前状态下,phpsql不能用于任何生产环境。
版本/发布
发布编号为 'vX.Y.Z',git标签用于管理发布。
-
X表示实现。0:预发布不稳定开发者版本。1:稳定版本
-
Y表示一组功能/API。任何版本的增加都意味着功能/API的更改和/或API的更改。第三方组件可能变得不兼容。
-
Z表示错误修复版本。功能和API没有变化,只是解决了现有功能中的错误。第三方组件不会变得不兼容。(除非它们依赖于一个存在的错误,这暗示该组件的开发者是一个白痴)
合作
有关修改此项目代码库时需要了解的说明,请参阅文件 HACKING.md。
对于对phpsql的任何更改,应该在github上有一个 问题。与问题相关的分支应命名为 'issue#1234',其中1234是该问题的编号。
有几种方式可以为这个项目做出贡献
-
为现有的错误或缺失的功能创建问题。 (请提供您期望发生的事情以及实际发生的事情。)
-
实现尚未缺失的功能。(记得在修改之前打开一个问题,让其他人知道您正在实施它)
-
编写测试。(针对尚未实现的功能或失败的测试应该在不同的分支中提交。记得为它创建一个问题。)