Как применить подстановочный знак в instr () в MySQL?

0

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

Мой код:

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

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

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

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

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

Теги:
wildcard

2 ответа

1
Лучший ответ

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

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

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

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

0

Прежде всего, 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());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню