【发布时间】:2021-09-12 10:26:58
【问题描述】:
我有一个 PHP,我想做 2 次插入和 1 次删除,但我只能进行一次插入。如果数组包含最后一个参数 == "historico" 应该从instant_table 中删除所有具有相同serial_num 的寄存器并将数组插入instant_table 并插入history_table("SensorData")。如果不是(数组没有参数“historico”),应该从instant_table 中删除所有具有相同serial_num 的寄存器,并且只将数组插入instant_table。
我的代码:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$serial_numb = test_input($_POST["serial_numb"]);
$DHTtempC = test_input($_POST["DHTtempC"]);
$DHThumid = test_input($_POST["DHThumid"]);
$CCS811_CO2 = test_input($_POST["CCS811_CO2"]);
$CCS811_tVOC = test_input($_POST["CCS811_tVOC"]);
$PM25 = test_input($_POST["PM25"]);
$PM10 = test_input($_POST["PM10"]);
$reading_date = date("Y-m-d");
$update_status = test_input($_POST["update_status"]);
$tipo_tabla = test_input($_POST["tipo_tabla"]);
// Create connection
// Check connection
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
if ($tipo_tabla == "historico"){
$sql = "INSERT INTO SensorData (serial_numb, DHTtempC, DHThumid, CCS811_CO2, CCS811_tVOC, PM25, PM10, reading_date, update_status)
VALUES ('" . $serial_numb . "', '" . $DHTtempC . "', '" . $DHThumid . "', '" . $CCS811_CO2 . "', '" . $CCS811_tVOC . "', '" . $PM25 . "', '" . $PM10 . "', '" . $reading_date . "', '" . $update_status . "')";
}
$sql = "DELETE FROM instant_data WHERE (serial_numb = '" . $serial_numb . "')";
$sql = "INSERT INTO instant_data (serial_numb, DHTtempC, DHThumid, CCS811_CO2, CCS811_tVOC, PM25, PM10, reading_date, update_status)
VALUES ('" . $serial_numb . "', '" . $DHTtempC . "', '" . $DHThumid . "', '" . $CCS811_CO2 . "', '" . $CCS811_tVOC . "', '" . $PM25 . "', '" . $PM10 . "', '" . $reading_date . "', '" . $update_status . "')";
if ($mysqli->query($sql) === TRUE) {
echo "New record created successfully";
}
else {
echo "Error: " . $sql . "<br>" . $mysqli->error;
}
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$mysqli->close();
}
else {
echo "No data posted with HTTP POST.";
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
总结一下,如果数组中包含参数,INSERTE(TABLE1) + DELETE 同serial_num(TABLE2) + INSERTE(TABLE2)。如果不是 DELETE 与相同的 serial_num(TABLE2) + INSERTE(TABLE2)。
编辑:现在这段代码只进行第二次插入
【问题讨论】:
-
学习使用参数!使用参数值修改查询字符串只会使代码容易受到 SQL 注入攻击和莫名其妙的语法错误。
-
数组是由 arduino 发送给我的,我在其中将参数添加到数组的末尾。
-
您是在执行这些查询还是每次都覆盖
$sql? -
你从不执行'$sql'中的查询,请显示你所有的代码
-
使用所有代码编辑