MySQL LIKE + php sprintf - PullRequest
       2

MySQL LIKE + php sprintf

13 голосов
/ 05 октября 2010
$test = sprintf("SELECT * FROM `table` WHERE `text` LIKE '%%s%'", mysql_real_escape_string('test'));

echo $test;

вывод:

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

но он должен выводить:

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

Ответы [ 5 ]

38 голосов
/ 05 октября 2010
... LIKE '%%%s%%'", mysql_real_escape_string('test'));

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

3 голосов
/ 05 октября 2010

Попробуйте:

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

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

1 голос
/ 29 апреля 2011

Ты смешиваешь контексты.Для согласованности поместите те элементы, которые не заключены в одинарные кавычки SQL, вне строки формата sprintf () :

$test = sprintf(
          "SELECT * FROM `table` WHERE"
            . "`xt` LIKE '%s'",
          "%" . mysql_real_escape_string("test") . "%"
        );
1 голос
/ 05 октября 2010

Вам нужно экранировать знаки процента со знаком процента %%.

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

echo $test;
0 голосов
/ 05 октября 2010
$test = "SELECT * FROM `table` WHERE `text` LIKE '%s%'" . mysql_real_escape_string('test');

echo $test;
...