之前我已多次这样做,重新使用传递给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%' )
我正在犯的明显错误是什么?
答案 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));
^ ^