swlib / swpdo
Swoole 协程 SQL 组件,类似于 PDO
1.0.0-alpha
2018-04-08 08:23 UTC
Requires
- php: >=7.0
Requires (Dev)
- eaglewu/swoole-ide-helper: dev-master
- phpunit/phpunit: ~7
This package is auto-updated.
Last update: 2024-09-17 18:44:17 UTC
README
简介
无需成本的传统 PDO 到 Swoole 协程迁移计划。
安装
最佳安装方式: Composer
composer require swlib/swpdo
协程
Swoole 的底层实现了协程调度,业务层无需感知。开发者可以使用同步代码编写方法,在不感知的情况下实现异步 IO 的效果和超高性能,避免传统异步回调引起的离散代码逻辑和陷阱。过多的回调层会导致代码难以维护。
需要在如 onRequet
、onReceive
和 onConnect
的事件回调函数中使用,或者使用 go 关键字包裹(默认开启 swoole.use_shortname
)。
示例
由于 PDO 使用了多个引擎,在 PHP 层面上难以通过类实现的构造函数返回不同的实例。
除了构造函数不同外,所有方法的使用方式相同。
查询
$options = [ 'mysql:host=127.0.0.1;dbname=test;charset=UTF8', 'root', 'root' ]; $sql = 'select * from `user` LIMIT 1'; //PDO $pdo = new \PDO(...$options); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //strong type $pdo_both = $pdo->query($sql)->fetch(); $pdo_assoc = $pdo->query($sql)->fetch(\PDO::FETCH_ASSOC); $pdo_object = $pdo->query($sql)->fetch(\PDO::FETCH_OBJ); $pdo_number = $pdo->query($sql)->fetch(\PDO::FETCH_NUM); //SwPDO $swpdo = SwPDO::construct(...$options); //default is strong type $swpdo_both = $swpdo->query($sql)->fetch(); $swpdo_assoc = $swpdo->query($sql)->fetch(\PDO::FETCH_ASSOC); $swpdo_object = $swpdo->query($sql)->fetch(\PDO::FETCH_OBJ); $swpdo_number = $swpdo->query($sql)->fetch(\PDO::FETCH_NUM); var_dump($pdo_both === $swpdo_both); var_dump($pdo_assoc === $swpdo_assoc); var_dump($pdo_object == $swpdo_object); var_dump($pdo_number === $swpdo_number); //output: true true true true
预处理
//PDO $pdo = new \PDO(...$options); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //strong type $statement = $pdo->prepare($sql); $statement->execute(); $pdo_fetch = $statement->fetch(\PDO::FETCH_ASSOC); $statement->execute(); $pdo_fetch_all = $statement->fetchAll(); $statement->execute(); $pdo_fetch_all_column = $statement->fetchAll(\PDO::FETCH_COLUMN, 1); $statement->execute(); $pdo_fetch_column = $statement->fetchColumn(); $statement->execute(); //SwPDO $swpdo = SwPDO::construct(...$options); $statement = $swpdo->prepare($sql); $statement->execute(); $swpdo_fetch = $statement->fetch(\PDO::FETCH_ASSOC); $statement->execute(); $swpdo_fetch_all = $statement->fetchAll(); $statement->execute(); $swpdo_fetch_all_column = $statement->fetchAll(\PDO::FETCH_COLUMN, 1); $statement->execute(); $swpdo_fetch_column = $statement->fetchColumn(); $statement->execute(); var_dump($pdo_fetch === $swpdo_fetch); //true var_dump($pdo_fetch_all === $swpdo_fetch_all); //true var_dump($pdo_fetch_all_column === $swpdo_fetch_all_column); //true var_dump($pdo_fetch_column === $swpdo_fetch_column); //true
绑定
//PDO $pdo = new \PDO(...$options); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //strong type $statement = $pdo->prepare($sql); $statement->execute(['id' => 1]); $pdo_bind_exec = $statement->fetch(\PDO::FETCH_ASSOC); $statement->bindValue(':id', 1); $statement->execute(); $pdo_bind_val = $statement->fetch(\PDO::FETCH_ASSOC); $statement->bindParam(':id', $id); $statement->execute(); $pdo_bind_param = $statement->fetch(\PDO::FETCH_ASSOC); //SwPDO $swpdo = SwPDO::construct(...$options); $statement = $swpdo->prepare($sql); $statement->execute(['id' => 1]); $swpdo_bind_exec = $statement->fetch(\PDO::FETCH_ASSOC); $statement->bindValue(':id', 1); $statement->execute(); $swpdo_bind_val = $statement->fetch(\PDO::FETCH_ASSOC); $statement->bindParam(':id', $id); $statement->execute(); $swpdo_bind_param = $statement->fetch(\PDO::FETCH_ASSOC); var_dump($pdo_bind_exec === $swpdo_bind_exec); //true var_dump($pdo_bind_val === $swpdo_bind_val); //true var_dump($pdo_bind_param === $swpdo_bind_param); //true