2011-11-16 67 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%'");