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

php/sql新手。 正在尝试将相似名称搜索更改为精确搜索。即使使用我知道在表中的搜索值,也无法找到任何记录

原始代码:

 $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
谢谢大家。现在它似乎运行良好。我确信我以前删除了所有不必要的内容,包括%,但显然没有。