2014-07-17 20 views
1

我很難推理這個輸出。在PHP SQL查詢中的虛假真相

問題出在一臺服務器上,而不是另一臺服務器,不知何故,當只有一個相同的值時,值被計算爲多個「真值」。

這是一個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

如果$ row ['newPermID']是一個整數,給定這些值的大小,更可能是32位和64位版本的PHP之間的區別 –

+3

您使用的是哪個版本的PHP?我認爲與這些比較有關的一些錯誤在某些時候是固定的。 – IMSoP

+0

調試,'var_dump($ SelectedID)'和'var_dump($ row ['newPermID']'並比較 –

回答

5

這是一個PHP是太爽和引擎蓋下做一些意想不到的神奇。

只要它發現2個字符串看起來像數字 - 它將它們轉換爲數字並比較後(你可能會運行32位PHP,它只是溢出這樣一個大整數)。

實施例:

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

爲了避免它使用===比較,這將阻止它這樣做。

+0

感謝評論,我剛剛測試了它,你說的對。+1爲你的解決方案。 – OptimusCrime

+0

就是這樣..從來沒有見過這樣的覆蓋。謝謝Zerkms! – Luke

+0

這不是一個覆蓋'==='按類型進行比較 –