Использование подстановочного знака, чтобы все записи были сопоставлены.
Мой код:
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());