2009-12-15 1 views
0

Использование подстановочного знака, чтобы все записи были сопоставлены.Как применить шаблон в instr() в MySQL?

Мой код:

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

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

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

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

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

ответ

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()); 
Смежные вопросы