plasma / driver-mysql
Plasma的MySQL/MariaDB驱动程序。
Requires
- php: >=7.1
- ext-bcmath: *
- ext-mbstring: *
- evenement/evenement: ^3.0|^2.0
- obsidian/validation: ^0.1.0
- plasma/binary-buffer: ^0.1.0|dev-master
- plasma/core: ^0.4.0|^0.3.0|dev-master
- react/event-loop: ^1.0|^0.5|^0.4
- react/promise: ^2.7
- react/socket: ^1.1
- react/stream: ^1.0
Requires (Dev)
- ext-zlib: *
- clue/block-react: ^1.3
- phpunit/phpunit: ^7.0
- react/filesystem: ^0.1.2
- react/promise-stream: ^1.1
This package is auto-updated.
Last update: 2024-08-29 05:00:17 UTC
README
Plasma提供了一个异步、非阻塞(数据访问)数据库抽象层。这是Plasma的MySQL/MariaDB驱动程序。
驱动程序使用ReactPHP异步与数据库服务器接口。
驱动程序支持通过驱动程序选项设置连接字符集,需要注意的是默认值是utf8mb4
(UTF-8),这是一个你应该一直使用的字符集。
还应注意的是,支持FOUND_ROWS
标志的MySQL版本,在使用StreamQueryResultInterface::getAffectedRows()
对SELECT
查询时,可以返回非零值。
入门
您可以使用composer
安装此组件。命令是
composer require plasma/driver-mysql
使用composer安装组件及其依赖项后,您可以通过创建工厂实例来开始。
工厂接受一个循环实例和一个选项数组(有关可用选项,请参阅工厂类文档)。
工厂还允许您使用react/filesystem
异步与文件系统接口,如果发生LOCAL INFILE
请求。
此外,如果您数据库服务器使用的是该驱动程序(尚未)不支持的认证插件,您可以创建自己的认证插件。
use Plasma\Client; use Plasma\Drivers\MySQL\DriverFactory; use React\EventLoop\Factory; $loop = Factory::create(); $factory = new DriverFactory($loop, array()); $client = Client::create($factory, 'user:password@localhost:3306/database', array()); // Code which uses the client to run queries against the database $loop->run();
Unix套接字连接支持使用unix://
方案,因此示例连接URI将如下所示。
unix://user:password@localhost/database
在没有数据库的情况下使用Unix套接字连接时,需要尾部斜杠。当使用localhost
作为Unix套接字路径时,将使用默认mysql路径。
游标
MySQL从5.7版本开始支持游标(MariaDB 10.3)。因此,驱动程序将拒绝5.7以下版本的MySQL,或者MariaDB 10.3版本,因为它们不支持游标(尽管能力可能表明相反)。
如果在驱动程序方法调用时已知,则驱动程序将抛出LogicException
,或者推迟它并使用LogicException
拒绝承诺。
压缩
默认启用数据包压缩,所有等于或大于50字节的包都会自动压缩(只要zlib可用)。可以使用compression.enable
标志禁用它。
服务器OK响应消息
驱动程序通过名为serverOkMessage
的Plasma客户端事件公开服务器上的每个OK响应消息数据包。参数是Messages\OkResponseMessage
的实例。
因此,高级用户可以检查服务器状态并执行某些操作,或者只是将其记录下来以进行纯粹统计目的。
类型扩展
此驱动程序使用名为driver-mysql
的类型扩展管理器。在解码从数据库接收到的行时,类型扩展可以解码两种不同类型的值,具体取决于使用的协议。
当使用文本协议(常规查询)时,类型扩展将原始值作为字符串获取。
但是,当使用二进制协议(预编译语句)时,类型扩展将获取使用的\Plasma\BinaryBuffer
实例。必须谨慎使用。读取过多可能导致丢失行,因为剩余的字段无法正确解码。