我想知道
之间的区别if($value == 1){
//code
}
和
if($value == '1'){
//code
}
$ value是我从数据库(MySQL)中选择的整数 当然,我将其作为Interger插入数据库。
这两种方法目前都能正常工作,这是更准确的方法吗?
感谢。
答案 0 :(得分:3)
最正确的方法是:
if($value === '1')
这是因为MySQL中的所有(非NULL)值都作为字符串返回,因为这可以防止高精度存储的精度损失,例如BIGINT
被发送到32位进程,或者修复点实数。
但是,您最有可能遇到:
if($value == 1)
因为真的,谁在乎呢?
答案 1 :(得分:1)
更准确的方式
与使用正确的类型进行比较是很好的习惯,即使是像PHP这样的松散打字语言,因为这样可以在将来的某个时候避免麻烦。因此,如果您的$value
是字符串,请与字符串(... == '1'
)进行比较。如果您知道它是整数,请执行... == 1
。
请参阅PHP文档的这一章:Type Juggling和String conversion to numbers
答案 2 :(得分:1)
if($value == 1){
//code
}
这里你只是将值与数字进行比较
if($value == '1'){
//code
}
这里只是将值与String
进行比较如果你要使用这个 我建议你将1更改为名称而不是数字
答案 3 :(得分:0)
$value == 1
将$value
与integer 1
进行比较。
$value == '1'
将$value
与string 1
进行比较。
如果您说$value
包含一个整数,并且它的值也是1
,则两个比较都将评估为true
。
这是因为,在使用==
时,您正在执行loose comparison。这意味着类型不必相同。因此,'1' == 1
将返回true
,即使'1'
是字符串且1
是整数。 '1' == true
和1 == true
也将返回true
。这是因为1
,'1'
和true
都被视为相等。
但是,使用===
运算符,您可以执行严格的比较。在这种情况下,类型 必须相同。 '1' === 1
将返回false
,因为'1'
是一个字符串,而1
是一个整数。 '1' === true
和1 === 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并且不会导致问题。