MySQL LIKE + php sprintf
$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%'
Ответы
Ответ 1
... LIKE '%%%s%%'", mysql_real_escape_string('test'));
Чтобы напечатать символ %
, вам нужно избежать его самого. Поэтому первые два %%
будут печатать символ %
, а третий - для спецификатора типа %s
. Вам понадобится двойной %%
в конце.
Ответ 2
Try:
$test = sprintf("SELECT * FROM `table` WHERE `text` LIKE '%%%s%%'", mysql_real_escape_string('test'));
В sprintf
, если вы хотите получить знак %
, вам нужно вставить %%
. Итак, это %%
для первого шаблона %
, %s
для самой строки и %%
для последнего шаблона %
.
Ответ 3
Вам нужно избегать знака процента с знаком процента %%
.
$test = sprintf("SELECT * FROM `table` WHERE `text` LIKE '%%%s%%'", mysql_real_escape_string('test'));
echo $test;
Ответ 4
Перепутайте контексты. Для согласованности поставьте вещи, которые не входят в одинарные кавычки SQL за пределами строки sprintf():
$test = sprintf(
"SELECT * FROM `table` WHERE"
. "`xt` LIKE '%s'",
"%" . mysql_real_escape_string("test") . "%"
);
Ответ 5
$test = "SELECT * FROM `table` WHERE `text` LIKE '%s%'" . mysql_real_escape_string('test');
echo $test;
Ответ 6
Это помогло мне с примером
http://www.encodez.com/blog/2009/11/escaping-in-mysql-like-statement-when-sprintf