Php SQL搜索已从“喜欢”更改为“不工作”
php/sql新手。 正在尝试将相似名称搜索更改为精确搜索。即使使用我知道在表中的搜索值,也无法找到任何记录 原始代码:Php SQL搜索已从“喜欢”更改为“不工作”,php,sql,where,sql-like,addslashes,Php,Sql,Where,Sql Like,Addslashes,php/sql新手。 正在尝试将相似名称搜索更改为精确搜索。即使使用我知道在表中的搜索值,也无法找到任何记录 原始代码: $sch = "SELECT record_key, surname, given_names, birth_date, death_date, age FROM records WHERE surname LIKE '".addslashes($name)."%'; $result = mysql_que
$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)';
(我不确定“每一端或另一端”的原因。)
我能让它工作的唯一方法是,如果我放弃addslashes并只使用:
其中姓氏=“$name”
我理解它很容易被注入。你在
LIKE
子句中的尾随%
出现在你的精确搜索中。%
只有在使用LIKE
时才有意义,所以它在寻找与你正在传递的任何东西的精确匹配,但末尾有一个%
像'criteria%'
会找到任何以criteria
='criteria%'
将完全匹配该文本,包括%。请尝试:
$sch = "SELECT record_key, surname, given_names, birth_date, death_date, age
FROM records
WHERE surname = '".addslashes($name)."'";
$result = mysql_query($sch);
没有%
%
在LIKE
模式中是一个通配符,但在=
模式中是一个正则字符。您可以将%
与LIKE
子句一起使用,只需按如下方式更改代码即可
$sch = "SELECT record_key, surname, given_names, birth_date, death_date, age
FROM records
WHERE surname = '".addslashes($name)."';
$result = mysql_query($sch);
尝试使用双引号正确结束查询字符串:
$sch = "SELECT record_key, surname, given_names, birth_date, death_date, age
FROM records
WHERE surname LIKE '".addslashes($name)."%'";
您不能将
=
与%
通配符一起使用。不要使用mysql函数。从PHP5.5开始,它们就被弃用了。认真阅读SQL注入,这可能会在将来为您节省很多麻烦。麻烦和黑客:)尝试mysql\u real\u escape\u string($name)
,但你真的应该转到mysqli\u real\u escape\u string
谢谢大家。现在它似乎运行良好。我确信我以前删除了所有不必要的内容,包括%,但显然没有。