【问题标题】:To deal with 'Boolean' values in PHP & MySQL处理 PHP 和 MySQL 中的“布尔”值
【发布时间】:2012-09-21 13:31:03
【问题描述】:

目前我在我的 MySQL 数据库中使用 Tinyint(1) 来指示 Boolean 值,我真的不喜欢这样。那么,如何通过PHP 在我的MySQL 数据库中存储和检索Boolean 值?

如何在WHERE子句中使用以及如何在INSERT, UPDATE查询中正确赋值?

当我在 PHP 上恢复它时,它是 TRUEtrue,或者只是 1,如果我要使用 === 进行检查?

您从Tinyint(1) 迁移到BOOLEAN 时也遇到过任何问题吗?

提前致谢。 :)

更新:

我知道Tinyint(1)Boolean 相同,但是我想处理Boolean 数据类型而不是Tinyint(1)。这就是我问这个问题的原因。

【问题讨论】:

  • BOOL, BOOLEAN 只是 MySQL 中TINYINT(1)同义词
  • 谢谢,是的,我知道,但我想在我的 PHP 端使用 Boolean,而不是 Tinyint,这就是我问这个问题的原因......
  • 虽然这取决于您的方法,但在插入任何 int 类型时,您可能需要将 true false 关键字转换为 int。我确实相信某些形式的准备好的语句会为您做出这种安排,但如果您的查询是内联的,那么这是必要的。

标签: php mysql boolean


【解决方案1】:

对于布尔值,不要使用=== FALSE - 该值已经是布尔值(除非函数要求您使用===,例如strpos())。该值是布尔值 - 从技术上讲,它是一个整数,但 PHP 是一种动态语言,所以它不是问题。

考虑preg_match() 函数 - 它返回匹配数(整数)。

你愿意这样写吗?

if (preg_match('/\bregexp?\b/', $variable) === 1)

还是那个?

if (preg_match('/\bregexp?\b/', $variable))

显然,没有明确的=== 1 的方式更好。你问它是否匹配,而不是它是否有 0 个匹配。另外,如果您认为=== 1 更安全,为什么不使用=== 1 === TRUE

当然,可以使用(bool)!! 将值转换为布尔值。

此外,在某些语言(例如 C 或 Perl)中,布尔值和数字之间没有区别。它只是工作。

【讨论】:

    【解决方案2】:

    MySQL 没有布尔数据类型。 Tinyint(1) 非常接近。在 PHP 中使用它很简单。

    If (1) echo 'true'; // is the same as if (true)
    // Just as
    if (0) echo 'false'; // is the same as if (false)
    

    如果你真的想要一个布尔值,你可以这样做

    // $mysql_data is tinyint value from db
    $boolean = $mysql_data ? true : false;
    // Now you have your boolean as $boolean
    

    【讨论】:

    • 在 MySQL 中,值 TRUE 和 FALSE 只是 1 和 0 的别名,如 in mysql docs 所述
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2011-09-25
    相关资源
    最近更新 更多