($ value == 1)和($ value ==' 1')之间的差异

时间:2014-08-01 08:15:53

标签: php mysql

我想知道

之间的区别
if($value == 1){
  //code
}

if($value == '1'){
  //code
}

$ value是我从数据库(MySQL)中选择的整数 当然,我将其作为Interger插入数据库。

这两种方法目前都能正常工作,这是更准确的方法吗?

感谢。

6 个答案:

答案 0 :(得分:3)

最正确的方法是:

if($value === '1')

这是因为MySQL中的所有(非NULL)值都作为字符串返回,因为这可以防止高精度存储的精度损失,例如BIGINT被发送到32位进程,或者修复点实数。

但是,您最有可能遇到:

if($value == 1)

因为真的,谁在乎呢?

答案 1 :(得分:1)

  

更准确的方式

与使用正确的类型进行比较是很好的习惯,即使是像PHP这样的松散打字语言,因为这样可以在将来的某个时候避免麻烦。因此,如果您的$value是字符串,请与字符串(... == '1')进行比较。如果您知道它是整数,请执行... == 1

请参阅PHP文档的这一章:Type JugglingString conversion to numbers

答案 2 :(得分:1)

if($value == 1){ //code }

这里你只是将值与数字进行比较

if($value == '1'){ //code }

这里只是将值与String

进行比较

如果你要使用这个 我建议你将1更改为名称而不是数字

答案 3 :(得分:0)

$value == 1

$valueinteger 1进行比较。

$value == '1'

$valuestring 1进行比较。

如果您说$value包含一个整数,并且它的值也是1,则两个比较都将评估为true

这是因为,在使用==时,您正在执行loose comparison。这意味着类型不必相同。因此,'1' == 1将返回true,即使'1'是字符串且1是整数。 '1' == true1 == true也将返回true。这是因为1'1'true都被视为相等。

但是,使用===运算符,您可以执行严格的比较。在这种情况下,类型 必须相同。 '1' === 1将返回false,因为'1'是一个字符串,而1是一个整数。 '1' === true1 === true也是如此。

由于该值以整数形式存储在数据库中,因此我建议使用

if ($value == 1) {
    //code
}

只有当您需要确保$value是整数而不是其他内容时,请使用:

if ($value === 1) {
    //code
}

答案 4 :(得分:0)

if($value == 1){
  //code
}

这更合适,因为来自DB的$值是一个整数值。

但即便是以下的工作。但这就是我们在php中表示字符串的方式。

if($value == '1'){
    //code
}

这里,字符串到整数的类型转换会自动发生。所以这两个条件都是真的。

答案 5 :(得分:0)

问题有点不清楚。我们是否谈到过去SQL服务器的命令?否则这个问题与MySQL无关。因此,我假设这里的上下文是SQL注入保护。

如果某些内容发送到MySQL,那么将它括在引号之间会更安全。例如

网址foorbar?ID = 1

处理更安全:

<?php $query="SELECT * FROM something WHERE ID='".mysql_escape($ID)."'" ?>

大于

<?php $query="SELECT * FROM something WHERE ID=".mysql_escape($ID) ?>

因为后一种情况不能保护像123 OR 1=1这样的结构,如果表中包含大量数据,这会导致SQL服务器过载。 '123 OR 1=1'将被用作数字并被理解为123并且不会导致问题。