当前位置: 首页 > ai >正文

TDengine 语言连接器(PHP)

简介

PHP 语言广泛用于 Web 开发的开源脚本语言。它语法简单,容易学习,既支持面向过程,也支持面向对象编程。具有跨平台性,能与多种数据库交互,可与 HTML 等前端技术配合,动态生成网页内容。常用于开发各类网站、API 及编写命令行脚本,拥有大量开源项目和活跃社区,在 Web 开发领域始终占据重要地位。

php-tdengine 是由社区贡献的 PHP 连接器扩展,还特别支持了 Swoole 协程化。

PHP 连接器依赖 TDengine 客户端驱动。

项目地址:https://github.com/Yurunsoft/php-tdengine

TDengine 服务端或客户端安装后,taos.h 位于:

  • Linux:/usr/local/taos/include
  • Windows:C:\TDengine\include
  • macOS:/usr/local/include

TDengine 客户端驱动的动态库位于:

  • Linux:/usr/local/taos/driver/libtaos.so
  • Windows:C:\TDengine\taos.dll
  • macOS:/usr/local/lib/libtaos.dylib

支持的平台

  • Windows、Linux、MacOS

  • PHP >= 7.4

  • TDengine >= 2.0

  • Swoole >= 4.8 (可选)

支持的版本

TDengine 客户端驱动的版本号与 TDengine 服务端的版本号是一一对应的强对应关系,建议使用与 TDengine 服务端完全相同的客户端驱动。虽然低版本的客户端驱动在前三段版本号一致(即仅第四段版本号不同)的情况下也能够与高版本的服务端相兼容,但这并非推荐用法。强烈不建议使用高版本的客户端驱动访问低版本的服务端。

安装步骤

安装 TDengine 客户端驱动

TDengine 客户端驱动的安装请参考 安装指南

编译安装 php-tdengine

下载代码并解压:

curl -L -o php-tdengine.tar.gz https://github.com/Yurunsoft/php-tdengine/archive/refs/tags/v1.0.2.tar.gz \
&& mkdir php-tdengine \
&& tar -xzf php-tdengine.tar.gz -C php-tdengine --strip-components=1

版本 v1.0.2 可替换为任意更新的版本,可在 TDengine PHP Connector 发布历史。

非 Swoole 环境:

phpize && ./configure && make -j && make install

手动指定 tdengine 目录:

phpize && ./configure --with-tdengine-dir=/usr/local/Cellar/tdengine/3.0.0.0 && make -j && make install

--with-tdengine-dir= 后跟上 tdengine 目录。
适用于默认找不到的情况,或者 MacOS 系统用户。

Swoole 环境:

phpize && ./configure --enable-swoole && make -j && make install

启用扩展:

方法一:在 php.ini 中加入 extension=tdengine

方法二:运行带参数 php -dextension=tdengine test.php

示例程序

本节展示了使用客户端驱动访问 TDengine 集群的常见访问方式的示例代码。

所有错误都会抛出异常:TDengine\Exception\TDengineException

建立连接

建立连接
<?phpuse TDengine\Connection;
use TDengine\Exception\TDengineException;try {// instantiate$host = 'localhost';$port = 6030;$username = 'root';$password = 'taosdata';$dbname = null;$connection = new Connection($host, $port, $username, $password, $dbname);// connect$connection->connect();
} catch (TDengineException $e) {// throw exceptionthrow $e;
}

插入数据

插入数据
<?phpuse TDengine\Connection;
use TDengine\Exception\TDengineException;try {// instantiate$host = 'localhost';$port = 6030;$username = 'root';$password = 'taosdata';$dbname = 'power';$connection = new Connection($host, $port, $username, $password, $dbname);// connect$connection->connect();// insert$connection->query('CREATE DATABASE if not exists power');$connection->query('CREATE STABLE if not exists meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)');$resource = $connection->query(<<<'SQL'INSERT INTO power.d1001 USING power.meters TAGS(California.SanFrancisco, 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000)power.d1002 USING power.meters TAGS(California.SanFrancisco, 3) VALUES ('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000)power.d1003 USING power.meters TAGS(California.LosAngeles, 2) VALUES ('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000) ('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000)power.d1004 USING power.meters TAGS(California.LosAngeles, 3) VALUES ('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000) ('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)SQL);// get affected rowsvar_dump($resource->affectedRows());
} catch (TDengineException $e) {// throw exceptionthrow $e;
}

同步查询

同步查询
<?phpuse TDengine\Connection;
use TDengine\Exception\TDengineException;try {// instantiate$host = 'localhost';$port = 6030;$username = 'root';$password = 'taosdata';$dbname = 'power';$connection = new Connection($host, $port, $username, $password, $dbname);// connect$connection->connect();$resource = $connection->query('SELECT ts, current FROM meters LIMIT 2');var_dump($resource->fetch());
} catch (TDengineException $e) {// throw exceptionthrow $e;
}

参数绑定

参数绑定
<?phpuse TDengine\Connection;
use TDengine\Exception\TDengineException;try {// instantiate$host = 'localhost';$port = 6030;$username = 'root';$password = 'taosdata';$dbname = 'power';$connection = new Connection($host, $port, $username, $password, $dbname);// connect$connection->connect();// insert$connection->query('CREATE DATABASE if not exists power');$connection->query('CREATE STABLE if not exists meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)');$stmt = $connection->prepare('INSERT INTO ? USING meters TAGS(?, ?) VALUES(?, ?, ?, ?)');// set table name and tags$stmt->setTableNameTags('d1001', [// same format as parameter binding[TDengine\TSDB_DATA_TYPE_BINARY, 'California.SanFrancisco'],[TDengine\TSDB_DATA_TYPE_INT, 2],]);$stmt->bindParams([[TDengine\TSDB_DATA_TYPE_TIMESTAMP, 1648432611249],[TDengine\TSDB_DATA_TYPE_FLOAT, 10.3],[TDengine\TSDB_DATA_TYPE_INT, 219],[TDengine\TSDB_DATA_TYPE_FLOAT, 0.31],]);$stmt->bindParams([[TDengine\TSDB_DATA_TYPE_TIMESTAMP, 1648432611749],[TDengine\TSDB_DATA_TYPE_FLOAT, 12.6],[TDengine\TSDB_DATA_TYPE_INT, 218],[TDengine\TSDB_DATA_TYPE_FLOAT, 0.33],]);$resource = $stmt->execute();// get affected rowsvar_dump($resource->affectedRows());
} catch (TDengineException $e) {// throw exceptionthrow $e;
}

常量

常量说明
TDengine\TSDB_DATA_TYPE_NULLnull
TDengine\TSDB_DATA_TYPE_BOOLbool
TDengine\TSDB_DATA_TYPE_TINYINTtinyint
TDengine\TSDB_DATA_TYPE_SMALLINTsmallint
TDengine\TSDB_DATA_TYPE_INTint
TDengine\TSDB_DATA_TYPE_BIGINTbigint
TDengine\TSDB_DATA_TYPE_FLOATfloat
TDengine\TSDB_DATA_TYPE_DOUBLEdouble
TDengine\TSDB_DATA_TYPE_BINARYbinary
TDengine\TSDB_DATA_TYPE_VARBINARYvarbinary
TDengine\TSDB_DATA_TYPE_TIMESTAMPtimestamp
TDengine\TSDB_DATA_TYPE_NCHARnchar
TDengine\TSDB_DATA_TYPE_UTINYINTutinyint
TDengine\TSDB_DATA_TYPE_USMALLINTusmallint
TDengine\TSDB_DATA_TYPE_UINTuint
TDengine\TSDB_DATA_TYPE_UBIGINTubigint
http://www.xdnf.cn/news/37.html

相关文章:

  • 【数据结构_10】二叉树(1)
  • 深入理解设计模式之模板方法模式 1d87ab8b42e98069b6c2c5a3d2710f9a
  • 停止回答 docker启动redis
  • Python中如何加密/解密敏感信息(如用户密码、token)
  • java 设计模式之单例模式
  • 利用互斥锁或者利用逻辑过期解决缓存击穿问题
  • 【Linux我做主】探秘gcc/g++和动静态库
  • 22、字节与字符的概念以及二者有什么区别?
  • 【含文档+PPT+源码】基于微信小程序的非遗文化黄梅戏宣传平台的设计与实现
  • Oracle补丁安装工具opatch更新报错处理
  • pytorch学习02
  • ESP32之OTA固件升级流程,基于VSCode环境下的ESP-IDF开发,基于阿里云物联网平台MQTT-TLS连接通信(附源码)
  • HttpSessionBindingListener 的用法笔记250417
  • vscode与vim+cscope+tags热键冲突
  • Qwen2.5-VL视觉大语言模型复现过程,没碰到什么坑
  • 大模型时代下全场景数据消费平台的智能BI—Quick BI深度解析
  • Hyperf (Swoole)的多进程 + 单线程协程、Gin (Go)Go的单进程 + 多 goroutine 解说
  • 【android telecom 框架分析 01】【基本介绍 2】【BluetoothPhoneService为何没有源码实现】
  • Oracle测试题目及笔记(多选)
  • CentOS 7 安装教程
  • Python自学第2天:条件语句,循环语句
  • 阿尔特拉 EP1C12F324I7N AlteraFPGA Cyclone
  • Go语言从零构建SQL数据库(8):执行计划的奥秘
  • 名胜古迹传承与保护系统(springboot+ssm+vue+mysql)含运行文档
  • FortiAI 重塑Fortinet Security Fabric全面智能化进阶
  • Android studio前沿开发--利用socket服务器连接AI实现前后端交互(全站首发思路)
  • nginx中的代理缓存
  • XCZU7EG‑L1FFVC1156I 赛灵思XilinxFPGA ZynqUltraScale+ MPSoC EG
  • Vscode 插件开发
  • 【NLP 63、大模型应用 —— Agent】