0

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)';

(我不确定“每个结尾”或“%”的原因)

我可以让它工作的唯一方法是如果我废弃了addlashes并只使用: WHERE surname = '$name';

据我所知,这很容易被注射。

4

4 回答 4

0

尝试用双引号正确结束查询字符串:

$sch = "SELECT record_key, surname, given_names, birth_date, death_date, age
 FROM records
 WHERE surname LIKE '".addslashes($name)."%'";
于 2013-09-20T07:38:36.203 回答
0

%您在LIKE子句中的尾随出现在您的精确搜索中。%唯一在使用时有意义,LIKE因此它正在寻找与您传递的任何内容的完全匹配,但%最后带有 a 。

LIKE 'criteria%'会找到任何开始的东西criteria

= 'criteria%'将完全匹配该文字,包括 %.

于 2013-09-20T07:34:37.497 回答
0

尝试:

 $sch = "SELECT record_key, surname, given_names, birth_date, death_date, age
               FROM records
               WHERE surname = '".addslashes($name)."'";
    $result = mysql_query($sch);

没有%.

%在模式中是通配符LIKE,但在模式中是常规字符=

于 2013-09-20T07:34:40.360 回答
0

您可以使用%条款LIKE,只需更改您的代码如下...

$sch = "SELECT record_key, surname, given_names, birth_date, death_date, age
               FROM records
               WHERE surname = '".addslashes($name)."';
    $result = mysql_query($sch);
于 2013-09-20T07:37:07.573 回答