sprintf论点太少了

时间:2010-12-09 16:27:32

标签: php printf

之前我已多次这样做,重新使用传递给sprintf()函数的值。但是这段代码返回了一个“警告:sprintf()[function.sprintf]:......中的参数太少了。”消息。

以下是代码:

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

理想情况下,$ match1的值将被插入到上面显示的SQL WHERE子句的段中 - 两次,每次由'%'字符包装以进行通配符搜索。

如果$ match1 =“test”,结果字符串值$ search_clause将为:

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

我正在犯的明显错误是什么?

2 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:2)

$转义为\$

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