处理 PHP 和 MySQL 中的“布尔”值

新手上路,请多包涵

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

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

When I have it back on PHP, it’s TRUE , true , or simply 1 , if I’m gonna check that with ===

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

提前致谢。 :)

更新:

I know that Tinyint(1) is the same as Boolean , however I want to work on Boolean data type instead of Tinyint(1) .这就是我问这个问题的原因。

原文由 Mahdi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 545
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

原文由 kehers 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于布尔值,不要使用 === 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)中,布尔值和数字之间没有区别。它只是工作。

原文由 Konrad Borowski 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏