2010-10-05 2 views
12
$test = sprintf("SELECT * FROM `table` WHERE `text` LIKE '%%s%'", mysql_real_escape_string('test')); 

echo $test; 

выход:MySQL LIKE + PHP Sprintf

SELECT * FROM `table` WHERE `text` LIKE '%s 

но следует выводить:

SELECT * FROM `table` WHERE `text` LIKE '%test%' 

ответ

34
... LIKE '%%%s%%'", mysql_real_escape_string('test')); 

Для печати % персонажа вам нужно, чтобы избежать его с собой. Поэтому первые два %% будут печатать символ %, а третий - для спецификатора типа %s. Вам также нужен двойной %%.

+0

благодарю вас , Это помогло мне. –

3

Try:

$test = sprintf("SELECT * FROM `table` WHERE `text` LIKE '%%%s%%'", mysql_real_escape_string('test')); 

В sprintf, если вы хотите, чтобы получить % знак, вы должны вставить %%. Итак, это %% для первого шаблона %, %s для самой строки и %% для последнего шаблона %.

0
$test = "SELECT * FROM `table` WHERE `text` LIKE '%s%'" . mysql_real_escape_string('test'); 

echo $test; 
1

Вам необходимо избегать знаков процента с знаком процента %%.

$test = sprintf("SELECT * FROM `table` WHERE `text` LIKE '%%%s%%'", mysql_real_escape_string('test')); 

echo $test; 
1

Вы смешиваете контексты. Для согласованности, положить вещи, которые не внутри SQL одинарные кавычки за пределами Sprintf() формат строка:

$test = sprintf(
      "SELECT * FROM `table` WHERE" 
      . "`xt` LIKE '%s'", 
      "%" . mysql_real_escape_string("test") . "%" 
     ); 
Смежные вопросы