MySQL存储boolean - 1,0或NULL

时间:2013-08-30 19:55:43

标签: php mysql boolean

所以我通常使用TinytInt(1)在MyIASM MySQL数据库中存储布尔值。在我目前正在处理的网站中,我需要能够存储1, 0 or NULL。此字段正在从PHP表单中的单选按钮填充。

当我在表单中选择“是”(值为1)时,会准确存储。当我选择'否'时(值为0),它将被存储为NULL。

如果用户既未选择“是”或“否”,我想保留NULL。

知道为什么'No'(0)值没有按预期存储?

编辑:

这是基本的HTML:

Yes <input type='radio' name='video_transfer_dvd_question' value='1' /> 
No <input type='radio' name='video_transfer_dvd_question' value='0' />

2 个答案:

答案 0 :(得分:0)

正如其他人已经将99%的问题评论为您的代码...您需要的是...... ...

if ($_POST["radiobutton"]) { $insertValue = 1; } else { $insertValue = 0; }

or

$insertValue = ($_POST["radiobutton"]) ? 1 : 0;

原因是空的单选按钮是一个空的$ POST var值,在mysql中被解释为NULL。

答案 1 :(得分:0)

在PHP中,''0都是considered FALSE in a boolean context,因此如果您尝试测试'' == 0,您会发现结果为TRUE。还有empty() only checks whether the argument is boolean FALSE,因此它无法真正区分空$_POST$_POST,其中包含恰好评估为FALSE的值。我的建议是更改单选按钮的值,使它们永远不会评估为布尔FALSE,例如:

Yes <input type='radio' name='video_transfer_dvd_question' value='yes' /> 
No <input type='radio' name='video_transfer_dvd_question' value='no' />

当您测试响应并选择要发送给MySQL的值时,这会使事情更加明确:

if (empty($_POST['button'])) {
    $value = NULL;
} elseif ($_POST['button'] == 'no') {
    $value = 0;
} elseif ($_POST['button'] == 'yes') {
    $value = 1;
}

您也可以使用!$_POST['button']代替empty($_POST['button']),但使用that would generate a warning if $_POST['button'] is not set,这可能不会发生。

如果您没有理由期望对此单选按钮的可能响应会发生变化并且不关心是否明确,那么您也可以将最后elseif块更改为简单else