imiphp / imi-tdengine
封装 tdengine 连接池,支持在 imi 框架中使用
v2.1.1
2022-06-10 01:30 UTC
Requires
- yurunsoft/tdengine-orm: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0.2
- imiphp/imi: ~2.0.0
- imiphp/imi-swoole: ~2.0.0
- phpstan/phpstan: ^1.0.2
- phpunit/phpunit: >=9
- swoole/ide-helper: ^4.7
- yurunsoft/ide-helper: ~1.0
Suggests
- ext-tdengine: TDengine 扩展 https://github.com/Yurunsoft/php-tdengine
README
介绍
封装 tdengine 连接池,支持在 imi 框架中使用。
本组件支持 RESTful 和扩展两种方式实现。
扩展安装请移步:https://github.com/Yurunsoft/php-tdengine
使用
引入本组件:composer require imiphp/imi-tdengine
配置
项目配置文件:(config/config.php)
// Swoole 连接池配置,非 Swoole 不要配 // 连接池必须使用扩展 'pools' => [ '连接池名' => [ 'pool' => [ 'class' => \Imi\TDengine\Pool\TDengineExtensionCoroutinePool::class, 'config' => [ 'maxResources' => 10, 'minResources' => 0, ], ], 'resource' => [ 'host' => '127.0.0.1', 'port' => 6030, 'user' => 'root', 'password' => 'taosdata', 'db' => 'db_test', ], ], ], 'beans' => [ // db 配置 'TDengine' => [ 'defaultPoolName' => '默认连接名', 'connections' => [ // 扩展配置,不需要可不配 '连接名1' => [ 'extension' => true, // 必须设为 true 'host' => '127.0.0.1', 'port' => 6030, 'user' => 'root', 'password' => 'taosdata', 'db' => 'db_test', ], // restful 配置,不需要可不配 '连接名2' => [ 'host' => '127.0.0.1', 'hostName' => '', // 域名,没有可不填 'port' => 6041, 'user' => 'root', 'password' => 'taosdata', 'db' => 'db_test' 'ssl' => false, 'timestampFormat' => \Yurun\TDEngine\Constants\TimeStampFormat::LOCAL_STRING, 'keepAlive' => true, ], ], ], ],
模型
使用参考:https://github.com/Yurunsoft/tdengine-orm
连接操作
直接操作连接对象,执行 SQL 语句
获取连接对象
// 获取默认连接名的连接 $connection = \Imi\TDengine\Pool\TDengine::getConnection(); // 获取指定连接名的连接 $connection = \Imi\TDengine\Pool\TDengine::getConnection('连接名123'); // 如果是扩展,$connection 类型为 \TDengine\Connection // 如果是 restful,$connection 类型为 \Yurun\TDEngine\Client
扩展用法
查询:
// 查询 $resource = $connection->query($sql); // 支持查询和插入 // 获取结果集时间戳字段的精度,0 代表毫秒,1 代表微秒,2 代表纳秒 $resource->getResultPrecision(); // 获取所有数据 $resource->fetch(); // 获取一行数据 $resource->fetchRow(); // 获取字段数组 $resource->fetchFields(); // 获取列数 $resource->getFieldCount(); // 获取影响行数 $resource->affectedRows(); // 获取 SQL 语句 $resource->getSql(); // 获取连接对象 $resource->getConnection(); // 关闭资源(一般不需要手动关闭,变量销毁时会自动释放) $resource->close();
参数绑定:
// 查询 $stmt = $connection->prepare($sql); // 支持查询和插入,参数用?占位 // 绑定参数方法1 $stmt->bindParams( // [字段类型, 值] [TDengine\TSDB_DATA_TYPE_TIMESTAMP, $time1], [TDengine\TSDB_DATA_TYPE_INT, 36], [TDengine\TSDB_DATA_TYPE_FLOAT, 44.5], ); // 绑定参数方法2 $stmt->bindParams([ // ['type' => 字段类型, 'value' => 值] ['type' => TDengine\TSDB_DATA_TYPE_TIMESTAMP, 'value' => $time2], ['type' => TDengine\TSDB_DATA_TYPE_INT, 'value' => 36], ['type' => TDengine\TSDB_DATA_TYPE_FLOAT, 'value' => 44.5], ]); // 执行 SQL,返回 Resource,使用方法同 query() 返回值 $resource = $stmt->execute(); // 获取 SQL 语句 $stmt->getSql(); // 获取连接对象 $stmt->getConnection(); // 关闭(一般不需要手动关闭,变量销毁时会自动释放) $stmt->close();
字段类型:
restful 用法
// 通过 sql 方法执行 sql 语句 var_dump($connection->sql('create database if not exists db_test')); var_dump($connection->sql('show databases')); var_dump($connection->sql('create table if not exists db_test.tb (ts timestamp, temperature int, humidity float)')); var_dump($connection->sql(sprintf('insert into db_test.tb values(%s,%s,%s)', time() * 1000, mt_rand(), mt_rand() / mt_rand()))); $result = $connection->sql('select * from db_test.tb'); $result->getResponse(); // 获取接口原始返回数据 // 获取列数据 foreach ($result->getColumns() as $column) { $column->getName(); // 列名 $column->getType(); // 列类型值 $column->getTypeName(); // 列类型名称 $column->getLength(); // 类型长度 } // 获取数据 foreach ($result->getData() as $row) { echo $row['列名']; // 经过处理,可以直接使用列名获取指定列数据 } $result->getStatus(); // 告知操作结果是成功还是失败;同接口返回格式 $result->getHead(); // 表的定义,如果不返回结果集,则仅有一列“affected_rows”。(从 2.0.17 版本开始,建议不要依赖 head 返回值来判断数据列类型,而推荐使用 column_meta。在未来版本中,有可能会从返回值中去掉 head 这一项。);同接口返回格式 $result->getRow(); // 表明总共多少行数据;同接口返回格式
版权信息
imi 遵循 木兰宽松许可证(Mulan PSL v2) 开源协议发布,并提供免费使用。
捐赠
开源不求盈利,多少都是心意,生活不易,随缘随缘……