我正在构建一个PHP/MySQL应用程序,我遇到了创建和更新查询的问题.我有5列设置为FLOAT类型,也设置为NULL列.我不打算在工作流程的后期填写它们.
但是,我需要为这个数据库创建新记录,我需要编辑现有记录,而根本不涉及这5个浮点字段.我正在使用OOP PHP,它使用标准save()方法检查对象中是否存在ID.如果没有,则调用create(),如果是,则调用update().它通常很有效.
的update()和create()方法被设计为从拉protected static $db_fields在每个类的顶部声明属性阵列,它包含了所有在该表中使用的字段.update()并create()通过该数组和运行任何INSERT INTO或UPDATE在SQL中,相应.
我的理解是,如果你使用''(两个单引号,空),SQL将跳过这些INSERT INTO或UPDATE请求并将它们保留为NULL.页面上任何地方的5个浮点值都没有表单字段,因此当方法运行时,值将是''.
这就是我收到"数据截断"错误的原因吗?它似乎有所不同 - 我之前没有看到过截断的错误,这就是为什么我要来找天才.谢谢.
lon*_*eck 32
''并且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
Run Code Online (Sandbox Code Playgroud)
插入显式nulls,或者甚至不指定插入中的列.
当你更新时,你可以发送你拥有的所有值,因为mysql会自动忽略未更改的值.
| 归档时间: |
|
| 查看次数: |
89859 次 |
| 最近记录: |