在我的数据库中,我的表格具有以下结构:
CREATE TABLE `tbl_app_versions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`app` varchar(100) DEFAULT NULL,
`version` varchar(50) DEFAULT NULL,
`force_update` bit(1) DEFAULT NULL,
`is_active` bit(1) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
请注意' force_update'有点。它可以是1或0。
在我的代码中,我获取数据并想要查看值是1还是0.由于某种原因,CakePHP会在以下两种情况下返回以下内容:
Array
(
[0] => Array
(
[Platforms] => Array
(
[id] => 1
[app] => ios
[version] => 1.0.042
[force_update] =>
[is_active] =>
[created] =>
[modified] =>
)
)
[1] => Array
(
[Platforms] => Array
(
[id] => 2
[app] => android
[version] => 1.0.041
[force_update] =>
[is_active] =>
[created] =>
[modified] =>
)
)
)
无论它的值如何,force_update都显示相同的值。我在大部分牌桌上都使用了比特,我必须能够做这个检查。
此:
<?php echo ($value['Platforms']['force_update']) ? 'Yes' : 'No'; ?>
或者:
<?php echo ($value['Platforms']['force_update'] = TRUE) ? 'Yes' : 'No'; ?>
或者:
<?php echo ($value['Platforms']['force_update'] == TRUE) ? 'Yes' : 'No'; ?>
尽管我的数据是:,但所有结果都相同
'1', 'ios', '1.0.042', '0', '1', NULL, NULL
'2', 'android', '1.0.041', '1', '1', NULL, NULL
答案 0 :(得分:0)
在数据库中使用bit时,如果field为NULL,则返回FALSE,否则返回TRUE。
因此,如果它在字段(1或0)中有任何值,它仍然返回TRUE。
解决方案: 将字段从bit更改为tinyint。 要么 在数据操作上,以FALSE为单位对该字段进行NULL,并为其赋予一个TRUE值。这样每次我读取数据时它都是NULL或有值,然后根据它我可以在视图中显示正确的消息。
答案 1 :(得分:0)
你可以从bit切换到tinyint(1),但我认为你的if语句是错误的。
尝试
<?php echo (!empty($value['Platforms']['force_update'])) ? 'Yes' : 'No'; ?>
empty()将捕获botch NULL和0作为&#39; No&#39;只有1作为&#39;是&#39;。