本文目录导读:

针对PHP连接时序数据库(如InfluxDB、TimescaleDB、TDengine等),最常用的方案及代码示例如下:
连接 InfluxDB(最常用)
使用官方客户端(推荐)
composer require influxdata/influxdb-client-php
<?php
require 'vendor/autoload.php';
use InfluxDB2\Client;
use InfluxDB2\Model\Query;
// 连接配置
$client = new Client([
"url" => "http://localhost:8086",
"token" => "your-token",
"org" => "your-org"
]);
// 查询数据
$queryApi = $client->createQueryApi();
$query = 'from(bucket: "your-bucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu")';
$tables = $queryApi->query($query);
foreach ($tables as $table) {
foreach ($table->records as $record) {
echo "Time: " . $record->getTime() . "\n";
echo "Value: " . $record->getValue() . "\n";
}
}
// 关闭连接
$client->close();
使用原生HTTP API
<?php
function queryInfluxDB($query) {
$url = "http://localhost:8086/query";
$params = [
'db' => 'your-db',
'q' => $query
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Token your-token'
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// 使用示例
$result = queryInfluxDB('SELECT * FROM cpu WHERE time > now() - 1h');
print_r($result['results'][0]['series'][0]['values']);
连接 TimescaleDB(PostgreSQL扩展)
使用PDO连接(和普通PostgreSQL一样):
<?php
$dsn = 'pgsql:host=localhost;port=5432;dbname=your_db';
$user = 'your_user';
$password = 'your_password';
try {
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 查询时序数据(使用 time_bucket 聚合)
$query = "
SELECT
time_bucket('1 minute', time) AS bucket,
AVG(temperature) as avg_temp
FROM sensor_data
WHERE time > NOW() - INTERVAL '24 hours'
GROUP BY bucket
ORDER BY bucket
";
$stmt = $pdo->query($query);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($results as $row) {
echo "Bucket: " . $row['bucket'] . " | Avg Temp: " . $row['avg_temp'] . "\n";
}
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
连接 TDengine(国产时序数据库)
使用官方扩展(推荐)
# 安装扩展(需要先编译) pecl install tdengine
<?php
// 连接
$conn = td_connect("localhost", 6030, "root", "taosdata", "test", 0);
if (!$conn) {
die("连接失败: " . td_error());
}
// 查询
$sql = "SELECT * FROM sensor_data WHERE ts > NOW - 1h LIMIT 10";
$result = td_query($conn, $sql);
if ($result) {
while ($row = td_fetch_row($result)) {
print_r($row);
}
td_free_result($result);
}
// 关闭连接
td_close($conn);
使用RESTful API
<?php
function queryTDengine($sql) {
$url = "http://localhost:6041/rest/sql";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $sql);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Basic ' . base64_encode('root:taosdata')
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
$result = queryTDengine('SELECT * FROM sensor_data LIMIT 10');
print_r($result['data']);
通用最佳实践
<?php
class TimeSeriesDB {
private $client;
private $type;
public function __construct($type, $config) {
$this->type = $type;
switch ($type) {
case 'influxdb':
// InfluxDB 初始化
break;
case 'timescaledb':
// TimescaleDB 初始化
break;
case 'tdengine':
// TDengine 初始化
break;
}
}
public function query($sql, $params = []) {
// 统一的查询接口
switch ($this->type) {
case 'influxdb':
return $this->queryInflux($sql);
case 'timescaledb':
return $this->queryPG($sql, $params);
case 'tdengine':
return $this->queryTD($sql);
}
}
public function close() {
// 关闭连接
}
}
选择建议
| 时序数据库 | 适用场景 | 连接方式 |
|---|---|---|
| InfluxDB | IoT、监控、实时分析 | 官方client/HTTP API |
| TimescaleDB | 已有PostgreSQL,需要时序能力 | PDO/PostgreSQL扩展 |
| TDengine | 大数据量、高性能场景 | 官方扩展/REST API |
| Prometheus | 监控指标收集 | 通过HTTP API查询 |
如需更具体的示例或遇到连接问题,请提供:
- 使用的时序数据库类型和版本
- 需要查询的数据表结构
- 具体的错误信息
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播