作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的代码如下所示(相关部分):
$json = file_get_contents('php://input');
$obj = json_decode($json, true);
$device_id =$obj['device_id'];
$num =$obj['sensor_value'];
$sensor_value =intval($num);
$date = new DateTime();
$date->setTimezone(new DateTimeZone('America/New_York'));
$fdate = $date->format('Y-m-d H:i:s');
$sql = "INSERT IGNORE INTO rr_emergency SET `device_id` = $device_id, `sensor_value` = $sensor_value, `date_time` = $fdate;";
$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
使用此语法不会将任何内容发布到我的数据库中。如果不存在具有相同 device_id
值的记录,我将尝试仅插入一条新记录。
而且,是的,我知道这段代码似乎存在 SQL 注入(inject)风险......数据来 self 控制的另一个网络服务,所以这不是这里的问题。
最佳答案
发送带有值的查询时,您应该使用参数化查询。我怀疑这是你的问题。您可以修复根本原因或为字符串和日期值添加单引号。我会推荐更标准的语法:
INSERT IGNORE INTO rr_emergency(device_id, sensor_value, date_time)
VALUES($device_id, $sensor_value, '$fdate')";
注意:您遇到的错误是编译时错误,因为 MySQL 不理解查询的含义。 INSERT IGNORE
忽略运行时错误,但查询必须先编译才能运行。
并且,让我重复使用参数化查询的建议。如果您这样做了,您的代码就会运行得更快。
编辑:
如果 device_id
在表中应该是唯一的,那么定义一个唯一约束:
alter table rr_emergency add constraint unq_emergency_device unique (device_id);
然后 insert ignore
将忽略任何重复键错误。
关于php - INSERT IGNORE INTO 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38341686/
我是一名优秀的程序员,十分优秀!