【问题标题】:MySQL storing boolean - 1, 0 , or NULLMySQL 存储布尔值 - 1、0 或 NULL
【发布时间】:2013-09-03 15:14:44
【问题描述】:

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

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

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

知道为什么“否”(0) 值没有按预期存储吗?

编辑:

这是基本的 HTML:

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

【问题讨论】:

  • 显示单选按钮的 html,以及表单提交后如何在 PHP 中处理它们。没有任何实际代码,我们无法为您提供帮助。
  • 似乎是您的代码问题,而不是 MySql 问题。请发布您的代码
  • 我相信你们都是对的。我打印了 MYSQL 正在使用的查询,每当我选择“否”时,它都会将“video_transfer_dvd_question”设置为 NULL,而不是 0

标签: php mysql boolean


【解决方案1】:

在 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,如果您没有理由期望对此单选按钮的可能响应会发生变化并且不关心是否明确。

【讨论】:

    【解决方案2】:

    正如其他人评论的那样,您的代码 99% 存在问题...您需要的是...

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

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

    【讨论】:

    • 对,但这不是我想要的。我基本上有3个选择。是 (1)、否 (0),或者用户将其留空 (Null)。现在,当我提交“0”时,它被解释为 NULL
    猜你喜欢
    • 2021-07-24
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2011-11-25
    • 2017-03-18
    相关资源
    最近更新 更多