Как применить подстановочный знак в instr () в MySQL? - PullRequest
0 голосов
/ 15 декабря 2009

Использование подстановочного знака, чтобы все записи были сопоставлены.

Мой код:

if(empty($tag))
{
$tag="%";
}

mysql_query("select * from mytable where instr(tag,'$tag')>0") or die(mysql_error());

Но он возвращает нулевой результат. Даже если

 if(empty($tag))
    {
    $tag="*";
    }

Это все еще возвращает нулевой результат. Как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 15 декабря 2009

INSTR не поддерживает подстановочные знаки.

Если вы хотите использовать подстановочные знаки в запросе MySQL, вам придется использовать функцию, которая поддерживает его, например, LIKE или REGEXP , то есть:

mysql_query("select * from mytable where tag LIKE '%$tag%'")

Приведенный выше запрос будет работать для любого значения $tag. Пустое значение (пустая строка) вернет все записи. Убедитесь, что вы правильно санируете значение $tag.

0 голосов
/ 15 декабря 2009

Прежде всего, instr (и его аналог locate) не распознают подстановочные знаки или любые другие специальные выражения - только литеральные строки. Обычный способ справиться с этим - изменить SQL соответствующим образом:

if (empty($tag))
     $whereclause = "";  // match all records
else $whereclause = "where instr(tag, '$tag') > 0";

mysql_query("select * from mytable $whereclause") or die(mysql_error());
...