2012-04-12 97 views
10

我想找到匹配特定模式的行数。在这个例子中,所有以“123” START:如何在mySQL LIKE查询中使用PHP字符串?

这是工作:

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '123%'"); 
$count = mysql_num_rows($query); 

的问题是LIKE会有所不同,所以我想在脚本中定义它,然后执行查询,但这是行不通的:

$prefix = "123"; 
$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix.'%'"); 
$count = mysql_num_rows($query); 

如何让这个查询在第二个例子中正常工作?

编辑:我也尝试过无期(也没有工作):

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE $prefix'%'"); 
+0

约翰,这东西我已经找到了,不要忘了在%使用字符串变量的时候帮助我,是用花括号。 '$ var1 =“foo”; $ var2 =“{$ var1} bar”; echo $ bar2;'输出:foo栏,你不必担心连接等等。然而,不像你想象的那样用单引号表示字符串。 – Blake 2012-04-13 00:10:25

回答

15

你有语法错误;没有必要在双引号字符串中放置句点。相反,它应该更像

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '$prefix%'"); 

您可以通过打印出字符串来确认它是否与第一种情况相同。

当然,这是不是一个好主意简单地注入变量到这样的查询字符串,因为SQL注入的危险。至少,你应该手动逃脱变量的内容与mysql_real_escape_string,这将使其也许是这样的:

$sql = sprintf("SELECT * FROM table WHERE the_number LIKE '%s%%'", 
       mysql_real_escape_string($prefix)); 
$query = mysql_query($sql); 

注意的sprintf第一个参数内百分号需要加倍落得在结果中出现一次。

+0

太棒了。非常感谢! – JROB 2012-04-12 23:56:27

+2

如果您使用任何用户输入的数据,则存在注射危险。没有危险:'$ var =“rawr”; ...查询(“SELECT * FROM table WHERE col ='{$ var}'”;'你正在控制你自己的服务器上的数据 – Blake 2012-04-13 00:06:17

+0

@Blake:显然,但我仍然有义务这么说。 – Jon 2012-04-13 00:14:37

3

做到像

$query = mysql_query("SELECT * FROM table WHERE the_number LIKE '$yourPHPVAR%'");