Использование подстановочного знака, чтобы все записи были сопоставлены.
Мой код:
if(empty($tag)) { $tag="%"; } mysql_query("select * from mytable where instr(tag,'$tag')>0") or die(mysql_error());
Но он возвращает нулевой результат. Даже если
if(empty($tag)) { $tag="*"; }
Он по-прежнему возвращает нулевой результат. Как решить эту проблему?
INSTR
не поддерживает подстановочные знаки.
Если вы хотите использовать подстановочные знаки в запросе MySQL, вам придется использовать функцию, которая его поддерживает, например LIKE или REGEXP , то есть:
mysql_query("select * from mytable where tag LIKE '%$tag%'")
Вышеуказанный запрос будет работать для любого значения $tag
. Пустое значение (пустая строка) вернет все записи. Убедитесь, что вы правильно дезинфицируете значение вашего $tag
.
Прежде всего, 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());