Php 使用0值进行重复密钥更新时

Php 使用0值进行重复密钥更新时,php,mysql,null,key,duplicates,Php,Mysql,Null,Key,Duplicates,我有一个我无法解决的大问题 我有一个表单,可以在mysql数据库中插入一些数据。如果我插入一个重复的键,一些字段将被更新。但是,如果表单包含空数据,查询将不会触及旧数据。 下一个查询可以工作,但如果我插入“0”,则查询不会使用新值(在本例中为“0”)升级行,其他数字也可以工作 以下是查询: INSERT INTO booking_prices (Data, Room, Disponibilita) VALUES ($data, $room, $_POST['Disponibilita'])

我有一个我无法解决的大问题

我有一个表单,可以在mysql数据库中插入一些数据。如果我插入一个重复的键,一些字段将被更新。但是,如果表单包含空数据,查询将不会触及旧数据。 下一个查询可以工作,但如果我插入“0”,则查询不会使用新值(在本例中为“0”)升级行,其他数字也可以工作

以下是查询:

INSERT INTO booking_prices (Data, Room, Disponibilita) 
VALUES ($data, $room, $_POST['Disponibilita']) 
ON DUPLICATE KEY UPDATE Disponibilita = IF(VALUES(Disponibilita) <> '', VALUES(Disponibilita), Disponibilita)
插入预订价格(数据、房间、显示)
值($data、$room、$\u POST['Disponibilita']))
重复密钥更新时Disponibilita=IF(值(Disponibilita)'、值(Disponibilita)、Disponibilita

MySQL的自动类型转换让您兴奋不已:

> select 0 = '', 0 <> '';
+--------+---------+
| 0 = '' | 0 <> '' |
+--------+---------+
|      1 |       0 |
+--------+---------+
1 row in set (0.00 sec)

您是否收到任何错误消息?那么为什么要将其与字符串(
'
)进行比较?我如何检查表单中插入的值是否不等于空值?您直接将$\u POST值插入yoru查询,因此您很容易受到攻击,如果该POST字段真的完全为空(字符串长度为0),您的查询将类似于
(数据,房间)(请注意DeBosiBiLITA的空白点),这是一个语法错误。不,实际上我以前检查过,例如,我发布了这个查询。如果字符串是空的$DISOBILITITA =“NULL”,那么我把它变成了DePosiBiLITI=(值(DePosiBiLITA)NULL,值(DePosiBiLITA),DePosiBiLITA),<代码>如果(长度(值(DexOnsiBILITA)))=0,…)
可能更好。真正的“空”值的长度为零。
> select BINARY 0 = '', BINARY 0 <> '';
+---------------+----------------+
| BINARY 0 = '' | BINARY 0 <> '' |
+---------------+----------------+
|             0 |              1 |
+---------------+----------------+