SQL-поиск изменен с равных на неработающие
php/sql новичок Попытка изменить поиск имени LIKE на точный поиск. Не удается найти какие-либо записи, даже если используются значения поиска, которые, как я знаю, находятся в таблице.
Оригинальный код:
$sch = "SELECT record_key, surname, given_names, birth_date, death_date, age
FROM records
WHERE surname LIKE '".addslashes($name)."%';
$result = mysql_query($sch);
Новый код:
$sch = "SELECT record_key, surname, given_names, birth_date, death_date, age
FROM records
WHERE surname = '".addslashes($name)."%';
$result = mysql_query($sch);
Я перепробовал все, что могу придумать, в том числе:
WHERE surname = 'addslashes($name)';
(Я не был уверен в причине для каждого конца или%)
Единственный способ заставить его работать - это удалить аддлэш и просто использовать: WHERE surname = '$name';
который я понимаю, уязвим для инъекций.
4 ответа
Пытаться:
$sch = "SELECT record_key, surname, given_names, birth_date, death_date, age
FROM records
WHERE surname = '".addslashes($name)."'";
$result = mysql_query($sch);
без %
,
%
подстановочный знак в LIKE
шаблоны, но это обычный персонаж в =
из них.
Попробуйте правильно завершить строку запроса двойными кавычками:
$sch = "SELECT record_key, surname, given_names, birth_date, death_date, age
FROM records
WHERE surname LIKE '".addslashes($name)."%'";
Ты можешь использовать %
с LIKE
Клаус, просто измени свой код, как показано ниже...
$sch = "SELECT record_key, surname, given_names, birth_date, death_date, age
FROM records
WHERE surname = '".addslashes($name)."';
$result = mysql_query($sch);
Трейлинг %
что у вас есть в вашем LIKE
пункт присутствует в вашем точном поиске. %
имеет значение только при использовании LIKE
, поэтому он ищет точное соответствие того, что вы проходите, но с %
в конце.
LIKE 'criteria%'
найдет все, что начинается с criteria
= 'criteria%'
будет точно соответствовать этому литералу, включая%.