我正在尝试设置一个服务器和函数,可以从 esp8266 获取数值数据并将其保存在 mysql 数据库表中。我正在尝试使用http“POST”函数将值从esp8266发送到我的服务器上的php脚本,该脚本可以将接收到的值传输到同一服务器上的mysql数据库中。
我遇到的问题是当我在 esp8266 上初始化该函数时,我收到来自服务器的响应:
-> 错误:插入传感器数据(device_id、状态、键、航向、速度)
-> VALUES ('1', '1', '11000000111001', '', '')
您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解使用“key、heading、velocity”附近的正确语法
-> 第 1 行的 VALUES ('1', '1', '11000000111001', '', '')'
这是我第一次使用 mysql 和 php,所以我对这个可能愚蠢的问题感到抱歉。我的目标是将多个值(整数可接受)从我的 esp8266 发送到我的 mysql 数据库,以使用新的“当前”值更新表中的行。
我已经四处搜寻,但还没有找到任何人能解决我的确切问题。我的硬件是 esp8266,通过 WiFi 连接到我的家庭网络,我的 apache/php/mysql 服务器是在 Raspberry Pi 3 B+ 上全新安装的。我通过上传一个简单的 html 页面作为 index.php 来确保 apache/php/mysql 服务器正确配置,并且我已经能够通过 phpMyAdmin 以及我的 Windows 10 PC 上的 HeidiSQL 连接和配置 mysql。据我所知,在通过 LAN 工作时,所有网络设置都是正确的。
esp8266 客户端/POST 代码:
int Device_id = 1;
int Status = 1;
int key = 12345;
int Heading = 69;
int Velocity = 21;
String data = "&device_id=" + String(Device_id, 2) + "&status=" + String(Status, 2) + "&key=" + String(key, 2) + "&heading" + String(Heading, 2) + "&velocity" + String(Velocity, 2);
String phpScript = "/sensor_data_upload.php";
client.print("POST ");
client.print(phpScript);
client.println(" HTTP/1.1");
client.println("Host: 192.168.1.155");
client.println("User-Agent: Arduino/1.8.9");
client.println("Connection: close");
client.println("Content-Type: application/x-www-form-urlencoded; charset=UTF-8");
client.print("Content-Length: ");
client.println(data.length());
client.println();
client.print(data);
php 导入/数据传输代码:
<?php
$device_id = $_POST['device_id'];
$status = $_POST['status'];
$key = $_POST['key'];
$heading = $_POST['heading'];
$velocity = $_POST['velocity'];
// MySQL server info
$servername = "localhost";
$username = "phpublisher";
$password = "phpublisher";
$dbname = "rov1_beta";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO sensor_data (device_id, status, key, heading, velocity)
VALUES ('$device_id', '$status', '$key', '$heading', '$velocity')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
我希望 mysql 表sensor_data 在相应的 device_id 行中更新,但正如我之前所说,我收到此错误消息:
20:20:00.587 -> Error: INSERT INTO sensor_data (device_id, status, key, heading, velocity)
20:20:00.587 -> VALUES ('1', '1', '11000000111001', '', '')<br>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'key, heading, velocity)
20:20:00.621 -> VALUES ('1', '1', '11000000111001', '', '')' at line 1
最佳答案
key
是MySQL中的保留关键字,因此需要使用反引号“`”对关键字进行转义。
例如:
$sql = "INSERT INTO sensor_data (device_id, status, `key`, heading, velocity)
VALUES ('$device_id', '$status', '$key', '$heading', '$velocity')";
关于php - 我的 sql 语法中有一个错误,用于通过 post 将值从 arduino 导入到 php 脚本,该脚本应该将它们发送到我的 mysql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56591113/