2010-12-09 4 views
3

Я делал это много раз раньше, чтобы повторно использовать значение, переданное в функцию sprintf(). Но этот код возвращает сообщение «Предупреждение: sprintf() [function.sprintf]: Слишком мало аргументов ...».слишком мало аргументов sprintf

Вот код:

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

В идеале значение $ match1 будет вставлен в сегмент 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)); 
              ^       ^
Смежные вопросы