我有一个需要专家建议的技术问题。我在数据库中有一个数据字符串“true”。但是当我检索它以测试条件时,哪一条更适合使用,即使它们都有效。
if ($data == true)
或
if ($data == "true")
我的直觉是使用“true”来测试存储的值是否为字符串,并在数据库值存储为布尔值时使用不带引号的true。但是想和你们确认一下。
...谢谢
答案 0 :(得分:4)
确认,至少差不多。您也可以检查数据类型,但是在PHP中,您需要使用===
运算符:
if ($data === TRUE) # boolean
if ($data === "true") # string
它被称为identical operator Docs,它将值和的类型进行比较。通常很有用。
答案 1 :(得分:1)
如果是字符串,那么$data == "true"
就是你想要的。
表达式($data == true)
相当于($data)
,因此即使true
$data == "false"
答案 2 :(得分:0)
要理解的重要案例是,如果值应为false
,则数据库的值将是什么。
如果数据库返回"false"
,您检查$val == true
和$val == "true"
,只有后者才会提供正确的结果。
您可能需要咨询php type comparison tables,以确保您了解您正在检查的内容。
此外,数据库是否有可能返回以下其中一项?
"true"
"True"
"TRUE"
"TrUe"
只需规范化或清理数据库值(理想情况下,在布尔字段中存储二进制值,以便不需要这样做。
答案 3 :(得分:0)
"false"==true
是真的。
如果您的数据库的列只有“true”或“false”,那么效率很低。将列转换为tinyint(或bool)。
否则,当您将数据库中的字符串值从数据库中拉出时,应考虑将"true"
和"false"
的字符串值切换为布尔值true
和false
。 / p>
答案 4 :(得分:0)
如果值在字面上按字母顺序存储在数据库中,则第二个(if ($data = "true")
)就是你想要的,尽管它们都可以工作。为清晰起见,我建议第二个。
您可以使用交互式shell对命令进行测试。
php -a
Interactive shell
php > $x = "true";
php > echo ($x == true) ? "True!" : "oops";
True!
php > echo ($x == "true") ? "True!" : "oops";
True!
php > echo ($x === "true") ? "True!" : "oops";
True!
php > echo ($x === true) ? "True!" : "oops";
oops
请注意===
的效果。由于该值是字符串,因此在使用===
时它们不相等。