使用PHP和MySQL创建动态搜索查询

时间:2014-08-11 20:20:32

标签: php mysql sql search mysqli

我尝试根据用户输入创建动态搜索查询。

的要求:

  • 用户可以填写无,部分或全部字段。
  • 查询在表中搜索符合所有要求的记录。

现在我完成了我的研究,并且我发现了多种方法。但它们都不起作用,如果它们起作用,它们远非实用。

尝试:

目前我正在创建这样的查询:

SELECT * 
FROM assignments 
WHERE (id = $id OR id = '') 
  AND (field1 = $field1 OR field1 = '')

此查询有效,但前提是您填写所有字段。

我从stackoverflow文章中得到了这个,我再也找不到了,说:

  

如果用户填写了输入字段,则会检查第一条规则   " id = $ input"       如果用户没有指定任何输入,它将检查" id ='' "当它       检查一下,它只会返回一切。因为它逃脱了空搜索规则。

但正如你可能已经知道的那样,它不起作用..

你怎么建议我接近这个?

3 个答案:

答案 0 :(得分:10)

尝试获取所有的post vars并循环遍历它们以查看它们是否有效,然后构建查询

<?php
$id = $_POST[id];
$field1 = $_POST[field1];
$field2 = $_POST[field2];
$field3 = $_POST[field3];

$whereArr = array();
if($id != "") $whereArr[] = "id = {$id}";
if($field1 != "") $whereArr[] = "field1 = {$field1}";
if($field2 != "") $whereArr[] = "field2 = {$field2}";
if($field3 != "") $whereArr[] = "field3 = {$field3}";

$whereStr = implode(" AND ", $whereArr);

$query = "Select * from assignments WHERE {$whereStr}";

这样的事情应该能够处理你需要的东西

答案 1 :(得分:2)

你应该从像WHERE语句这样的字符串开始,然后循环遍历用户想要搜索的所有字段并将它们添加到数组中,然后使用PHP函数“implode”来粘合字段和AND语句一起作为“粘合剂”。

现在将胶合的字符串添加到startquery并瞧!

我举个例子,但是打电话给我!

答案 2 :(得分:0)

根据响应动态构建查询绝对是必须的。但另一个允许用户根据甚至部分响应查找结果的好功能是使用MySQL REGEXP查询。例如,如果他们想在Top Gun数据库中找到“特立独行”,则查询REGEXP ='mav'| 'rick'会返回结果。这使您的搜索更接近用户习惯的搜索引擎功能。

Here's a REGEXP example, simplified.