2010-12-09 75 views
3

我已经做过很多次了,重新使用传入sprintf()函数的值。但是这段代码返回“Warning:sprintf()[function.sprintf]:...中的参数太少”。sprintf的参数太少

下面是代码:

$search_clause = sprintf(" (msgBody LIKE %%%1$s%% OR msgSubject LIKE '%%%1$s%%') ", mysql_real_escape_string($match1)); 

理想的$ MATCH1值将被插入到WHERE上面所示子句的SQL的段 - 两次,每次通过为通配符搜索“%”字符周围。

如果MATCH1 $ =“测试”中,$ search_clause生成的字符串值将是:

(msgBody LIKE '%test' OR msgSubject LIKE '%test%') 

什么是我做了明显的错误?

回答

11

$s可能会被解释为变量(请参阅variable expansion)。尝试使用单引号代替:

$search_clause = sprintf(' (msgBody LIKE "%%%1$s%%" OR msgSubject LIKE "%%%1$s%%") ', mysql_real_escape_string($match1)); 
+0

不知道如果stackoverflow做了或不,但我的代码实际上有单引号 - 不是双。 – 2010-12-09 16:31:44

2

只是逃避$\$

$search_clause = sprintf(" (msgBody LIKE %%%1\$s%% OR msgSubject LIKE '%%%1\$s%%') ", mysql_real_escape_string($match1)); 
              ^       ^