我是一个无法解决的大问题。
我有一个将一些数据插入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)
答案 0 :(得分:1)
您正在接受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 |
+---------------+----------------+