我正在我的应用程序中进行搜索功能,我有用户名,名称和区域,所以任何人都可以告诉我实现它的最佳方法。它应该像用户在搜索中输入的内容一样,脚本应该搜索数据库并获取所需的详细信息。 //我的代码在这里
<?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)
?>
以上是完整的代码。
首先,您需要更改!empty
和empty
而不是isset
和!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"));
}
?>
利用ajax请求。你的MySql查询应该是:
select * from user where uname like %username% or designation like %designation% or 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;
}`