PHP:比较运算符===不在托管服务器上工作

PHP:比较运算符===不在托管服务器上工作,php,Php,在文件defines.php中,我有define(“YES”,1) 我在login.php页面中将此文件包括为 require_once('/defines.php'); 如果($row['registered']==YES),则我有此检查。这不是真的。如果我使用双等于,它会起作用。是的 echo $row['registered']; echo YES; 我得到的结果是 1 1 但是,在我的本地主机上,==工作正常。为什么会有这种奇怪的行为?是否依赖于生产服务器 PS:我的hosing服

在文件
defines.php
中,我有
define(“YES”,1)

我在
login.php
页面中将此文件包括为

require_once('/defines.php');
如果($row['registered']==YES)
,则我有此检查。这不是真的。如果我使用双等于,它会起作用。是的

echo $row['registered'];
echo YES;
我得到的结果是

1
1
但是,在我的本地主机上,
==
工作正常。为什么会有这种奇怪的行为?是否依赖于生产服务器

PS:我的hosing服务器使用的是PHPV5.4

编辑

变量转储: 字符串(1)“1”整数(1) 但我在数据库中有tinyint类型,为什么我会得到字符串数据类型?

问题是

$var1 = '1';
$var2 = 1;

// this will be right
if ( $var1 == $var2 )
{ echo "'1' = 1"; }

// This will never be right
if ( $var1 === $var2 )
{ echo "'1' != 1"; }
在PHP中,不能使用===来匹配字符串和int或boolean

例如

1=='1'=真

1=='1'=错误

1==1=true

真===1=假

真==1=真

这意味着如果您使用===而不是==它需要与string==string或int==int相同的类型

如果要匹配int和string,则需要使用==我不建议在if语句中组合string和int

将字符串转换为int,并再次进行如下匹配

$var1 = (int) $row['registered'];
$var2 = (int) YES;

if ( $var1 === $var2 )
{ echo 'your right'; }
else
{ echo 'you got a problem'; }

数据库驱动程序将
注册的
值作为字符串返回

  • 您可以键入整数值并进行比较 使用===

    (int)$行[“已注册”]

  • 或者改用==运算符


检查此答案是否存在===和=

的差异。对
$row['registered']
是进行变量转储,以验证类型。您也可以尝试
(int)$row['registered']==是。但是,您应该始终知道您的变量类型,如果您不按照DarkBee的建议进行var_转储,则最好将其转换为int,
int($row['registered'])
Php将其转换为字符串,因为。。phpSee@Mihai将其转换为字符串的不是PHP,而是数据库驱动程序*或使用另一个数据库驱动程序:)