php - 我的 sql 语法中有一个错误,用于通过 post 将值从 arduino 导入到 php 脚本,该脚本应该将它们发送到我的 mysql 表

标签 php mysql

我正在尝试设置一个服务器和函数,可以从 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/

相关文章:

php - 单击添加按钮后如何将唯一行临时存储到html表中?

mysql - 在 mysql 中设置为唯一的几个字段

php - 将 mysql 行添加到表中 href 的末尾

php - 在php中创建一个错误日志文件

php - php中字符串到图像的转换并存储在mysql数据库中

mysql - CRM 关系 MySQL

php - 在 SuiteCRM 中使用原始 SQL

mysql - 在相同的meta_key中使用OR运算符选择帖子 AND 运算符用于不同的meta_key

php - 在 dompdf 中设置页脚

php - 在 php 中解析法国日期