返回
如何使用 HTTP 请求从 MySQL 数据库中检索数据?
php
2024-03-13 05:32:07
从 MySQL 数据库中检索数据的 HTTP 请求
问题概述
本文档了我使用 SIM7600CE 从托管在 AwardSpace 上的 MySQL 服务器检索数据的尝试时遇到的问题和解决方法。最初的 SQL 查询和 JSON 转换方法没有产生任何结果,因此我添加了一个 JSON 文件并使用了 ArduinoJson 库来尝试解决这个问题。
解决方法
配置 MySQL 数据库
首先,我确保 MySQL 数据库已正确配置并正在运行。
编写 PHP 脚本
我创建了一个 PHP 脚本,用于查询数据库并将其结果转换为 JSON 格式:
<?php
// Connect to database
$conn = new PDO('sqlite:readingsDB.sqlite');
// Check connection
if (!$conn) {
die("Connection failed");
}
// Query database
$sql = "SELECT humidity FROM reading ORDER BY distance DESC LIMIT 1";
$result = $conn->query($sql);
if ($result) {
// Convert results to JSON format
$data = [];
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
$data[] = $row;
}
$json_data = json_encode($data);
// Send JSON data response
echo $json_data;
} else {
echo "0 results";
}
?>
设置 Arduino 代码
在 Arduino 代码中,我使用了 TinyGsmClient
库连接到网络,使用 HTTP GET
请求向服务器发送请求,并从响应中解析 JSON 数据:
#include <TinyGsmClient.h>
const char server[] = "myserver.com";
const char path[] = "/script.php";
const int port = 80;
TinyGsmClient client(SIM7600CE);
void setup() {
// ...
}
void loop() {
// Send HTTP GET request
client.print("GET ");
client.print(path);
client.println(" HTTP/1.0");
client.print("Host: ");
client.println(server);
client.println("Connection: close");
if (client.println() == 0) {
Serial.println("Failed to send GET request");
client.stop();
return;
}
// Parse JSON response
if (!client.find("application/json")) {
Serial.println("Invalid response");
client.stop();
return;
}
// ...
// Close connection
client.stop();
}
附加信息
确保您的 Arduino 与网络连接良好,并且 PHP 脚本已正确配置。使用调试工具(如串行监视器)来检查通信。
结论
通过实施这些步骤,我成功地使用 HTTP 请求从 MySQL 数据库中检索数据。该方法使用 JSON 格式的数据转换,并通过 ArduinoJson 库进行解析。
常见问题解答
- 为什么我的 Arduino 无法连接到数据库? 确保您的 Arduino 已正确连接到网络,并且数据库配置正确。
- 为什么我无法解析 JSON 响应? 确保您的 PHP 脚本正在生成有效的 JSON 数据,并且您的 Arduino 代码正在正确使用 ArduinoJson 库。
- 如何改进请求和响应时间? 尝试优化您的 PHP 脚本和 Arduino 代码以提高性能。考虑使用缓存或并行化技术。
- 如何保护我的数据免受未经授权的访问? 实施身份验证机制并加密您的通信。
- 我可以使用此方法从其他数据源检索数据吗? 是的,此方法可以应用于任何可以通过 HTTP 访问的数据源。