PHP SQL查询中的错误真相

时间:2014-07-17 23:19:59

标签: php sql apache

我很难推断出这个输出。

问题在于一个服务器,而不是另一个服务器,并且不知何故,这些值被计算为多个"真理"当只有一个值相同时。

这是一个PHP版自动解释的东西,PHP试图使用数字而不是字符串?

任何想法都会有所帮助。谢谢!

$SelectedID="20140115214529625";

$con=GetSQLConnection("SomeDataBaseSomewhere");

$sqlQ="SELECT * FROM StoryTable ORDER BY  Name ASC";

$result = mysqli_query($con,$sqlQ);

while($row = mysqli_fetch_array($result)){
    if($SelectedID==$row['newPermID']){
        echo "Data: ".$SelectedID.", ".$row['newPermID']."\n";
    }else{}
}
mysqli_close($con);


Output:
Data: 20140115214529625, 20140115214529623
Data: 20140115214529625, 20140115214529624
Data: 20140115214529625, 20140115214529625 < Should Be The Only True Value???
Data: 20140115214529625, 20140115214529626

`

1 个答案:

答案 0 :(得分:5)

这是一个非常酷的PHP,并且会引起一些意想不到的魔力。

一旦它发现2个字符串看起来像数字 - 它将它们转换为数字并在之后进行比较(并且你可能会运行32位php,它只会溢出这么大的整数)。

示例:

var_dump('01' == '1'); // true

要避免使用===比较,这会阻止它这样做。