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,而是数据库驱动程序*或使用另一个数据库驱动程序:)