我正在构建一个 PHP/MySQL 应用程序,但我的创建和更新查询遇到了问题。我有 5 列设置为 FLOAT 类型,也设置为 NULL 列。我不打算在工作流程的后期才填写它们。
但是,我需要为此数据库创建新记录,并且需要编辑现有记录,而根本不触及这 5 个浮点字段。我正在使用使用标准的 OOP PHPsave()
检查对象中是否存在 ID 的方法。如果没有,它会调用create()
,如果是这样,它会调用update()
。通常情况下,它效果很好。
The update()
and create()
方法旨在从protected static $db_fields
在每个类的顶部声明的属性数组,其中包含该表中使用的所有字段。update()
and create()
遍历该数组,或者INSERT INTO
or UPDATE
相应地,在 SQL 中。
我的理解是,如果你使用''
(两个单引号,空),SQL 将跳过那些INSERT INTO
or UPDATE
请求并将它们保留为 NULL。页面上的任何地方甚至都没有这 5 个浮点值的表单字段,所以当然,当方法运行时,这些值将是''
.
这就是我收到“数据被截断”错误的原因吗?这似乎有所不同——我以前没有见过这个被截断的错误,这就是为什么我来找你们这些天才。谢谢。
''
and null
不一样。如果您的 mysql 服务器处于严格模式,那么它将拒绝执行插入,因为您为该列传递了无效数据。如果没有严格模式,它会返回警告。
mysql> create table a (a float not null);
Query OK, 0 rows affected (0.11 sec)
mysql> insert a values ('');
Query OK, 1 row affected, 1 warning (0.05 sec)
mysql> show warnings;
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'a' at row 1 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)
mysql> set sql_mode = 'STRICT_ALL_TABLES';
Query OK, 0 rows affected (0.02 sec)
mysql> insert a values ('');
ERROR 1265 (01000): Data truncated for column 'a' at row 1
要么插入显式null
s,或者甚至不指定插入中的列。
当你更新时,你可以发送你拥有的所有值,因为 mysql 会自动忽略未更改的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)