处理 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 上恢复它时,它是 TRUE
、true
,或者只是 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 中的“布尔”值的主要内容,如果未能解决你的问题,请参考以下文章