2011-11-02 57 views
0

注意到一個SQL查詢的語法一個小問題,這裏是怎麼一回事呢:PHP SQL查詢語法

$email = "[email protected]"; 

$query = "Select * From Users Where email=".$email; 

這不起作用,查詢已經過測試,工作正常,但是這基本上發展到:

Select * FROM Users WHERE [email protected] ; 

其產生空結果。

要執行它的正確方法,我一捻添加到我的$電子郵件變量的語法,基本爲:

$email = "\"[email protected]\""; 

一旦我指定的字符串變量中的報價,即當它按預期執行產生期望的結果。

我不確定這是否是最接近我的查詢執行語法的審美方式,我認爲還有其他選擇。感謝那些誰闡明這

+1

不知道你的問題是什麼?沒有引號的查詢是錯誤的,並且應該導致mySQL錯誤。 –

+0

沒什麼可看的..什麼是錯誤?查詢看起來很好,你可以用stripslashes。 – SSpoke

+0

在mysql查詢中需要引用引號。有很多方法可以做到這一點 – 2011-11-02 20:51:58

回答

3

光試試這個:

$query = "Select * From Users Where email='$email'"; 

或者:

$query = sprintf("Select * From Users Where email='%s'", $email); 

或者:

許多許多其他的方法....

+0

唉,打我吧。 1勝出。 ':)' – Biotox

0

爲什麼不這樣做:

$email = "[email protected]"; 

$query = "Select * From Users Where email = '$email'"; 
+0

不,$ $ email是用引號括起來的。 MySQL不會產生錯誤。 – Biotox

1
$email = "[email protected]"; 
$email = "'" . mysql_real_escape_string($email) . "'"; 
$query = "Select * From Users Where email=".$email; 
1

非引用這樣的變量將被解讀爲INT。始終引用所有字符串。單打就足夠了,你不需要像那樣雙打。

$query = "SELECT * From Users WHERE email= '".mysql_real_escape_string($email)."'"; 
0

您的解決方案能夠在正確的原則:SQL需要用引號括起來,因爲它是一個字符串的電子郵件地址。我建議讓代碼更優雅,只需將引號放在包含查詢的字符串中,而不是包含電子郵件地址的字符串中。

$email = "[email protected]"; 
$query = "Select * From Users Where email=\"".$email."\""; 

引號不是電子郵件地址的一部分,它們是查詢的一部分。如果你這樣做,如果你嘗試使用$email作爲別的東西,那麼你就不會有額外的引號,並且你不需要記住把引號放在你傳遞給同一個查詢的每個其他電子郵件地址的周圍。另外,您可能希望查看mysqli,它以稍微不同的方式處理查詢並作爲副作用,消除了所有這些無用的轉義字符串。

PS - 我同意那些建議使用單引號而不是雙引號的人。但是SQL確實接受雙引號(至少在我的系統上),所以我堅持使用你所使用的約定。