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

Posted

技术标签:

【中文标题】处理 PHP 和 MySQL 中的“布尔”值【英文标题】:To deal with 'Boolean' values in 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。我确实相信某些形式的准备好的语句会为您做出这种安排,但如果您的查询是内联的,那么这是必要的。 【参考方案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 所述

以上是关于处理 PHP 和 MySQL 中的“布尔”值的主要内容,如果未能解决你的问题,请参考以下文章

在Jackson中处理布尔值和字符串吗?

使用 if 语句处理布尔值

求助PHP和MySQL测试连接错误

PHP会话处理相关函数介绍

在 plist 中处理持久布尔值的最佳方法?

php的异常处理