【发布时间】:2018-12-13 14:58:15
【问题描述】:
我的数据库有多个布尔值。保存数据库后,布尔值转换为 tinyint(1)。我认为这是因为它只需要保存 1 或 0。
但是,我现在在比较 PHP 中的值时遇到了问题。我将 tinyint 保存到一个数组中,没有进行任何代码转换。该数组有多个文本和日期条目以及多个布尔值条目,例如:
array[0] is '09:45:00'
array[1] is '10:45:00'
array[2] is 1
array[3] is 0
array[4] is 0
array[5] is 1
array[6] is 'active'
现在,如果我循环遍历数组,我想检查该值是时间、文本还是真/假。
检查条目是否为真将始终返回真,因为没有条目是空的。检查条目是 1 还是 0 适用于布尔值,但是当我检查 'active' == 0 时它返回 true。为什么会这样?如果我将字符串与 tinyint 进行比较,我怎么能得到错误?
与 === 比较在任何情况下都不起作用。
【问题讨论】:
-
1 == true和0 == false,使用===是直接检查(所以它必须匹配类型等),使用==会为你工作 -
不幸的是,如果我检查 'active' == 0,它也会返回 true
-
你做错了。日期类型是数据库设计的一部分,而不是您应该从查询结果中推断出来的东西。无论类型如何,所有列都可能包含 null,因此在这种情况下总是会崩溃
-
@apokryfos 所以我应该保存 1 并允许 NULL,而不是保存 1 或 0?我试试,谢谢!
-
这绝对不是我说的。我说如果你有一个 NULL 你不能知道那个字段是否是一个日期,通常是字符串的数量,所以你应该知道你的字段是什么数据类型,而不是在查询后尝试推断它们