Php 删除大纲视图的SQL触发器
我将值发送到与MySQL数据库位于同一服务器上的php脚本。php脚本将值发送到数据库。然而,在路径的某个地方,有时一个值丢失了一个小数点,我得到了一个非常高的值Php 删除大纲视图的SQL触发器,php,mysql,sql,sql-server-2008,Php,Mysql,Sql,Sql Server 2008,我将值发送到与MySQL数据库位于同一服务器上的php脚本。php脚本将值发送到数据库。然而,在路径的某个地方,有时一个值丢失了一个小数点,我得到了一个非常高的值 我正在监测PH值和其他一些情况,因此该数字相对较低(在4-12之间)。有时候我的成绩是720而不是7.20。这应该通过触发器来纠正吗?如果是,怎么做?还是应该在PHP端处理?如何在输入时不接受值或使其为空?谢谢你抽出时间 <!DOCTYPE html> <html> <body>
我正在监测PH值和其他一些情况,因此该数字相对较低(在4-12之间)。有时候我的成绩是720而不是7.20。这应该通过触发器来纠正吗?如果是,怎么做?还是应该在PHP端处理?如何在输入时不接受值或使其为空?谢谢你抽出时间
<!DOCTYPE html>
<html>
<body>
<h1></h1>
<?php
// Create connection
$con = mysqli_connect("localhost", "***", "***", "***");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$temp1 = ( $_GET["1"] * 9/5)+32;
$temp2 = ( $_GET["3"] * 9/5)+32;
if ($_SERVER["REQUEST_METHOD"] == "GET") {
$sql = "INSERT INTO `ANALOG_SENSORS` (`TEMPERATURE`, `HUMIDITY`, `TEMPERATURE2`, `HUMIDITY2`,`PH`,`DATE_TIME`)
VALUES (" . $temp1 . ", " . $_GET["2"] . ", " . $temp2 . ", " . $_GET["4"] . ", " . $_GET["5"] . ",
NOW()- INTERVAL 7 HOUR)";
$result = mysqli_query($con, $sql);
}
</body>
</html>
浮点变量(浮点/双精度)应作为浮点变量处理
在MySQL和PHP中,有效的浮点数是整数和小数部分之间带有点的数字
var_dump(floatval('13.37')) => double(13.37)
var_dump(floatval('13,37')) => double(13)
如你所见,在昏迷状态下,小数部分被截断,MySQL的行为与此完全相同
您必须确保输入数据的格式是必须的
$ph = str_replace(',', '.', $_GET['5']);
在MySQL查询中,coma是保留字符,如果数据包含coma且不是字符串(如本例所示),则coma将被解释为分隔符,并向insert查询添加一个新列
SELECT 1.2 => 1.2
SELECT 1,2 => [1, 2]
另外,请确保MySQL表字段的类型正确设置为float/double。注意,您似乎对SQL注入非常开放,您的数据库将被自动化工具接管。你应该使用,否则后果自负。“这应该通过触发器纠正吗?”。在我看来:不是。如果你在插入数据库的过程中丢失了小数,你应该修复它。如果您由于测量误差而得到一个异常值,您应该在得到它时存储它。当您处理数据时,您可能希望将其包括在内、尝试修复或过滤掉。此外,触发器在更复杂的过滤器中是不够的,例如,首先收集所有数据,然后过滤掉3 std.dev之外的任何内容。此外,保留这些值还允许您稍后运行统计信息,例如确定一段时间内的读取错误数。