进行PHP-MySql搜索

进行PHP-MySql搜索,php,search,mysqli,Php,Search,Mysqli,我正在我的应用程序中创建搜索功能, 我有用户名、名称和地区, 那么,有谁能告诉我实现这一目标的最佳方法吗。 它应该与用户在搜索中输入的内容类似,脚本应该搜索数据库并获得所需的详细信息。 //我的代码在这里 <?php include_once("db.php"); if(isset($_POST['district'])){ $district=$_POST['district']; } if(isset($_POST['designation'])){ $design=$

我正在我的应用程序中创建搜索功能, 我有用户名、名称和地区, 那么,有谁能告诉我实现这一目标的最佳方法吗。 它应该与用户在搜索中输入的内容类似,脚本应该搜索数据库并获得所需的详细信息。 //我的代码在这里

<?php
include_once("db.php");
if(isset($_POST['district'])){
    $district=$_POST['district'];
}
if(isset($_POST['designation'])){
    $design=$_POST['designation'];
}
if(isset($_POST['name'])){
    $name=$_POST['name'];
}
if(isset($_POST['department'])){
    $dept=$_POST['department'];
}
$result=array();
$response=array();
if((isset($design)) &&(!isset($district)) && (!isset($name)))
{
    $a=$design;
    $stmt=$db->prepare("SELECT * FROM search WHERE designation LIKE ?");
    $stmt->bind_param("s",$a);
    $stmt->execute();
    $d=$stmt->get_result();
    while($b=$d->fetch_array(MYSQLI_ASSOC)){
        $result[]=$b;
}
}
else if((isset($district)) &&(!isset($design)) && (!isset($name)))
{
    $a=$district;
    $stmt=$db->prepare("SELECT * FROM search WHERE district LIKE ?");
    $stmt->bind_param("s",$a);
    $stmt->execute();
    $d=$stmt->get_result();
    while($b=$d->fetch_array(MYSQLI_ASSOC)){
        $result[]=$b;

    }
}
else if((isset($name)) &&(!isset($district)) && (!isset($district))){
    $a=$name;
    $stmt=$db->prepare("SELECT * FROM search WHERE name LIKE ?");
    $stmt->bind_param("s",$a);
    $stmt->execute();
    $d=$stmt->get_result();
    while($b=$d->fetch_array(MYSQLI_ASSOC)){
        $result[]=$b;

    }
}
if((isset($name))&& (isset($design))){
    $stmt=$db->prepare("SELECT * FROM search WHERE name LIKE ? AND designation LIKE ?");
    $stmt->bind_param("ss",$name,$design);
    $stmt->execute();
    $d=$stmt->get_result();
    while($b=$d->fetch_array(MYSQLI_ASSOC)){
        $result[]=$b;
    }
}
if(isset($dept)){
    $stmt=$db->prepare("SELECT * FROM search WHERE department LIKE ?");
    $stmt->bind_param("s",$dept);
    $stmt->execute();
    $d=$stmt->get_result();
    while($b=$d->fetch_array(MYSQLI_ASSOC)){
        $result[]=$b;

    }
}
$response['result']=$result;
echo json_encode($response)
?>

以上是完整的代码。

使用ajax请求。 您的MySql查询应该是:

从用户中选择*,其中uname like%username%或designation like%designation%或district like%district%

不要忘记使用参数化查询


希望有帮助。

试试这个。。我无法执行它

`$query='SELECT * FROM search WHERE ';
$stmt;
if(isset($_POST['district'])){
    $query+='district like @district '
    $stmt=$db->prepare($query);
    $stmt->bind_param(@district,$_POST['district']);

}
if(isset($_POST['designation'])){
    if(strlen($query>27))// district is set
    {
        $query+=' AND ';
    }
   $query+='district like @designation'
    $stmt=$db->prepare($query);
    $stmt->bind_param(@designation,$_POST['designation']);
}
if(isset($_POST['name'])){
    if(strlen($query>27))// district/design  is set
    {
        $query+=' AND ';
    }
    $query+='district like @name'
    $stmt=$db->prepare($query);
    $stmt->bind_param(@name,$_POST['name']);
}
if(isset($_POST['department'])){
  if(strlen($query>27))// district/design/dept  is set
    {
        $query+=' AND ';
    }
    $query+='district like @department'
    $stmt=$db->prepare($query);
    $stmt->bind_param(@department,$_POST['department']);
}
$result=array();
$d=$stmt->get_result();
    while($b=$d->fetch_array(MYSQLI_ASSOC)){
        $result[]=$b;
    }`

首先,您需要更改
!清空
清空
而不是
设置
!isset
因为您在顶部设置变量,所以它将始终被设置,并且将处于每个条件下,因此我已将其更改为空,如下面的代码所示

之后,您可以使用满足条件的参数创建一个数组,最后我已经在SQL中实现了这一点,并使用join绑定参数,我希望它对您有用

<?php
include_once("db.php");



$result=array();
$response=array();

if(isset($_POST['keyword']) && !empty($_POST['keyword']))
{
    $keyword = $_POST['keyword'];
    $sql = "SELECT * FROM search WHERE CONCAT(designation,' ', district, ' ', department, ' ',name) LIKE ?";

    $stmt=$db->prepare($sql);
    $key = "%".$keyword."%";
    $stmt->bind_param("s",$key);
    $stmt->execute();
    $d=$stmt->get_result();
    while($b=$d->fetch_array(MYSQLI_ASSOC)){
        $result[]=$b;
    }
    $response['result']=$result;
    echo json_encode($response);
} else {
    echo json_encode(array("message"=>"Keyword is not defined"));
}

?>


你可以发布一些代码吗?我已经尝试过简单的方法,就是简单地获取usrrname或district或Assignment,然后进行恶意操作。代码在哪里?我如何检查用户是否输入了用户名、Disignment或district我已经用我的代码编辑了问题。看一看,而不是使用多个if-else语句使用字符串concats。我指的是像flipkart snapdeal之类的大多数应用程序。它看起来像是糟糕的ui。如果你知道我的意思,是的,我只是检查了你的代码,而不是使用多个if-else语句。使用字符串concats向我显示了这个解析错误:语法错误,C:\xampp\htdocs\sr.php中的意外“$stmt”(T_变量),第8行尝试添加$stmt=null;并重新检查逗号、引号和分号,因为我没有执行它。在C:\xampp\htdocs\sr.php第9行的boolean上调用成员函数bind_param(),prepare()方法可能会返回false,您应该对此进行检查。至于为什么返回false,可能是表名或列名(在SELECT或WHERE子句中)不正确?我认为它绝对完美。它不应该返回false。感谢您的回答,但我仍然必须设置$\u POST['something']用我自己的方法。有没有一种方法可以检查整个数据库并找出匹配的位置。你面临什么问题?我想自动检测用户正在搜索什么,然后将其与sql db匹配。这只是mysql查询,你需要让ajax请求感谢你这么多人。它工作起来很有魅力。你真的让我的生活充满魅力简单,谢谢