2011-04-29 106 views
1

我已經搜索並搜索並嘗試了我讀過的內容,但由於某種原因,當使用變量而不是硬編碼值時,我的查詢失敗。如果使用變量而不是硬編碼值,PHP/MySQL - 查詢失敗

這是我的查詢:

$bugzilla_query="SELECT * FROM profiles WHERE userid='".$bugzilla_id."'"; 

我做得到cookie的值如下:

$bugzilla_id = $_COOKIE["Bugzilla_login"]; 

我開始懷疑,查詢是錯誤的,但變量控股即使它看起來正確,cookie值也沒有正確地檢索它,但是如果我設置了$bugzilla_id = 642;它仍然不起作用,但是如果我做$bugzilla_query="SELECT * FROM profiles WHERE userid=642";它可以很好地工作。

嗯,困惑!

+2

用戶'var_dump'來查看'$ bugzilla_query'中的內容 – Neal 2011-04-29 18:06:45

+0

我從另一個工作正常的腳本複製了同樣的語法與它的變量。我添加了一些空白,但仍然沒有運氣:( – martincarlin87 2011-04-29 18:07:15

+1

請確保妥善逃避您的數據,以避免SQL注入 – mfonda 2011-04-29 18:09:04

回答

0

非常感謝您的幫助。原來這是一個愚蠢的錯字我在我的代碼做:

我:

if ($bugzilla_id <= 0 || $bugzilla_id = '' || !isset($bugzilla_id)) 
{ 
    return "No Bugzilla cookie is set!"; 
}  

當我顯然需要:

if ($bugzilla_id <= 0 || $bugzilla_id == '' || !isset($bugzilla_id)) 
{ 
    return "No Bugzilla cookie is set!"; 
}  

我設置$bugzilla_id'',因爲我錯過了一個=在比較檢查。

我對此的建議 - 我可能會自己開始這樣做 - 將變量放在右側,因此請在相反的方向上寫入比較,然後馬上就會失敗。巧合的是,我在喬爾自己的網站上看到,他認爲這是一個好程序員的標誌:/

1

如果$ bugzilla_id應該是一個整數,請嘗試將它包裝在一個intval()中,以確保它作爲整數傳遞。

3

一般而言,您絕對不希望將用戶可以直接修改的任何值放入查詢中。此外,如果這應該是一個數字,爲​​什麼你在你的啓用變量的查詢中使用單引號,而不是在你的硬編碼的查詢中?注意區別?試試這個:

$bugzilla_query = sprintf("SELECT * FROM profiles WHERE userid = %d", $bugzilla_id); 

這將確保在進入您的查詢之前將其轉換爲整數。

+0

謝謝,但仍然沒有得到任何東西,但盟友很奇怪.... – martincarlin87 2011-04-29 18:12:11

+1

echo $ bugzilla_query並將其複製/粘貼到mysql並直接運行。怎麼了?什麼是查詢? – 2011-04-29 20:29:20

+0

嗨大衛,週末沒有在這裏,但只是嘗試了你的建議。有些東西正在玩變量,因爲查詢回聲顯示爲「SELECT * FROM profiles WHERE userid = 0」 – martincarlin87 2011-05-02 08:42:11

相關問題