2011-11-16 104 views
0

這真的很奇怪。使用WHERE子句作爲MySQL查詢中的一個變量不起作用

該查詢顯然作品:

$query = mysql_query("SELECT * FROM restaurant_page WHERE title LIKE '%$search_title%'"); 

但是,這並不:

$category = 'restaurant_page'; 

$query = mysql_query("SELECT * FROM '$category' WHERE title LIKE '%$search_title%'"); 

隨着第二次查詢,我得到的資源布爾錯誤。

$category是用戶想要從中搜索的表格。當我用變量打印查詢時,它與第一個完全相同。爲什麼不能這樣工作?

+0

我hightly懷疑‘這是完全一樣的第一個。’ – str

+1

確保你淨化你的輸入。http://xkcd.com/327/ –

+1

Got is guys。謝謝,它是蜱蟲,我在想INSERT VALUES。Uggg ...那是愚蠢的。 – Graham

回答

1

不要使用單引號周圍的表名,使用反引號(`)代替:

$query = mysql_query("SELECT * FROM `$category` WHERE title LIKE '%$search_title%'"); 

NB。請確保$category$search_title不是純粹的用戶提供的變量

2

用變量創建的查詢是否引用了表名?這對我來說似乎是一個錯誤。

1

在mysql查詢中,不要在$ category的周圍加引號。

$query = mysql_query("SELECT * FROM $category WHERE title LIKE '%$search_title%'"); 
1

'$category'中刪除單引號。

"SELECT * FROM '$category' WHERE title LIKE '%$search_title%'" 
---------------^^^^^^^^^^^^ 

如果需要,用反引號包圍$category。這僅在$category包含MySQL保留關鍵字時是必需的。但是,因爲它是一個可能成爲可能的變量。

$query = mysql_query("SELECT * FROM `$category` WHERE title LIKE '%$search_title%'"); 

當然,請不要忘記轉義$category,因爲它可能是用戶輸入。我們假設你已經爲$search_title這麼做了。

$category = mysql_real_escape_string($category); 
0

爲什麼你得到$ category的引號 - 刪除這些,它應該工作。

0

您應該始終將實際字符串中的變量分開。做這樣的事情:

$category = "restaurant_page"; 

$query = mysql_query("SELECT * FROM `".$category."` WHERE title LIKE 
'%".$search_title."%'"); 
0

LOL。這使我的一天。 刪除$類別的報價。我確定這只是一個有趣的錯誤。我們所有人都犯了一些錯誤。嘿嘿

爲了解決這一變化的「到」

$query = mysql_query("SELECT * FROM ".$category." WHERE title LIKE '%$search_title%'");