Php 添加搜索字段

Php 添加搜索字段,php,search,Php,Search,| | | | | | | | | | | | | | | | | | 你也可以巡逻搜查 SQL注入风险 如果在与数据库交互时使用提交表单中的值,则应在执行此操作之前转义内容。在MySQL中,最好的函数是MySQL\u real\u escape\u string() 添加要搜索的字段 如果您想在搜索查询中添加一个附加字段,如“Department”,只需在搜索表单上有一个与之对应的字段,然后调整SQL搜索,使其包含在WHERE子句中: $sql="SELECT ID, First_Name,

| | | | | | | | | | | | | | | | | |

你也可以巡逻搜查

SQL注入风险 如果在与数据库交互时使用提交表单中的值,则应在执行此操作之前转义内容。在MySQL中,最好的函数是
MySQL\u real\u escape\u string()

添加要搜索的字段 如果您想在搜索查询中添加一个附加字段,如“Department”,只需在搜索表单上有一个与之对应的字段,然后调整SQL搜索,使其包含在
WHERE
子句中:

$sql="SELECT ID, First_Name, Last_Name FROM contact WHERE First_Name LIKE '" . mysql_real_escape_string( $name ) . "%' OR Last_Name LIKE '" . mysql_real_escape_string( $name ) ."%'";
使用一个字段进行两次搜索 如果希望使用单个文本字段执行上述搜索,则需要为用户确定某种前缀,以便为第二个字段的值添加前缀

例如,如果我们指定“in:”作为前缀来指定科室,那么搜索“John in:Radiology”将查找任何名字以“John”开头的人,但只搜索“Radiology”科室中的人

$sql="SELECT ID, First_Name, Last_Name
      FROM contact
      WHERE ( First_Name LIKE '" . mysql_real_escape_string( $name ) . "%'
              OR Last_Name LIKE '" . mysql_real_escape_string( $name ) ."%' )
            AND Department='" . mysql_real_escape_string( $department ) ."'";
而不是

list( $name , $department ) = explode( ' in:' , $_POST['name'] , 2 );
相似搜索限制 目前,您的代码将只搜索以输入值开头的名字和/或姓氏。您可以通过在搜索字符串的开头添加另一个“%”,使搜索返回仅包含(而不仅仅是以开头)输入值的任何字段:

$name = $_POST['name'];
全文搜索 您可能想看看本教程-。它涵盖全文搜索的概念,允许您在多个数据库字段中查找通过单个字段提交的一个或多个单词

限制返回的行数 限制搜索返回的行数始终是一个好主意,无论是分页还是仅显示X行。如果不这样做,恶意用户只需搜索字母表中的每个字母,就可以从根本上刮取整个数据库。

SQL注入风险 如果在与数据库交互时使用提交表单中的值,则应在执行此操作之前转义内容。在MySQL中,最好的函数是
MySQL\u real\u escape\u string()

添加要搜索的字段 如果您想在搜索查询中添加一个附加字段,如“Department”,只需在搜索表单上有一个与之对应的字段,然后调整SQL搜索,使其包含在
WHERE
子句中:

$sql="SELECT ID, First_Name, Last_Name FROM contact WHERE First_Name LIKE '" . mysql_real_escape_string( $name ) . "%' OR Last_Name LIKE '" . mysql_real_escape_string( $name ) ."%'";
使用一个字段进行两次搜索 如果希望使用单个文本字段执行上述搜索,则需要为用户确定某种前缀,以便为第二个字段的值添加前缀

例如,如果我们指定“in:”作为前缀来指定科室,那么搜索“John in:Radiology”将查找任何名字以“John”开头的人,但只搜索“Radiology”科室中的人

$sql="SELECT ID, First_Name, Last_Name
      FROM contact
      WHERE ( First_Name LIKE '" . mysql_real_escape_string( $name ) . "%'
              OR Last_Name LIKE '" . mysql_real_escape_string( $name ) ."%' )
            AND Department='" . mysql_real_escape_string( $department ) ."'";
而不是

list( $name , $department ) = explode( ' in:' , $_POST['name'] , 2 );
相似搜索限制 目前,您的代码将只搜索以输入值开头的名字和/或姓氏。您可以通过在搜索字符串的开头添加另一个“%”,使搜索返回仅包含(而不仅仅是以开头)输入值的任何字段:

$name = $_POST['name'];
全文搜索 您可能想看看本教程-。它涵盖全文搜索的概念,允许您在多个数据库字段中查找通过单个字段提交的一个或多个单词

限制返回的行数
限制搜索返回的行数始终是一个好主意,无论是分页还是仅显示X行。如果不这样做,恶意用户只需搜索字母表中的每个字母,就可以从根本上刮取整个数据库。

添加假设字段,如
搜索字段
,然后使用
“SELECT*FROM contact WHERE search\u field='search value'order by First\u Name”
,如果它将是一个独特的字段,如电子邮件,请不要忘记在
search\u字段上建立索引。我希望您上面粘贴的代码不会投入生产。在SQL查询中使用用户输入之前,请不要信任用户输入并对其进行适当过滤,更不用说将db凭据和连接字符串存储在单独的文件中并将其包含在内

添加你的假设字段,比如说
搜索字段
,然后使用
“从联系人中选择*按姓名搜索字段='search value'顺序”
,如果它将是像电子邮件这样的唯一字段,不要忘了在
搜索字段
上建立索引。我希望您上面粘贴的代码不会投入生产。在SQL查询中使用用户输入之前,请不要信任用户输入并对其进行适当过滤,更不用说将db凭据和连接字符串存储在单独的文件中并将其包含在内

虽然我不知道wrt。他只在字母上使用多字节字符预匹配,这将阻止任何SQL注入。但是使用mysql\u real\u escape通常是一件好事。或者,使用预先准备好的语句更好更快。@dmwesq,这就是我所说的过滤用户输入的意思。用户输入是你的敌人,不要相信它。:)一些问题和评论-我故意不想返回名字,除非它们以列出的字母开头,这就是为什么我没有额外的通配符。但是,添加额外字段(如department)时,是否会使用并仅返回该部门中以所用字母开头的名称?我希望有一份部门所有人员的单独报表,无论他们的名字拼写如何?如果可能的话,我还希望能够从表单上的单个搜索字段进行搜索(如果有必要的话)。我尝试的方法没有奏效。此外,如何按照您的建议限制返回行?@dmwesq:请参阅我的修订答案,以获得一个解决方案,其中可以使用一个字段独立搜索两个字段。限制