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

我有一种将一些数据插入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)

最佳答案

您会因MySQL的自动类型转换而感到困惑:

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


注意这两个测试实际上是如何成功的。 0等于''

如果允许数字输入文本类型字段,则可能应该进行一些更严格的测试:

> select BINARY 0 = '', BINARY 0 <> '';
+---------------+----------------+
| BINARY 0 = '' | BINARY 0 <> '' |
+---------------+----------------+
|             0 |              1 |
+---------------+----------------+

07-26 05:35