gpt4 book ai didi

php - INSERT IGNORE INTO 不起作用

转载 作者:行者123 更新时间:2023-11-29 06:10:48 25 4
gpt4 key购买 nike

我的代码如下所示(相关部分):

$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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com