【问题标题】:Making a PHP MySql search进行 PHP MySql 搜索
【发布时间】:2018-01-02 10:49:10
【问题描述】:

我正在我的应用中创建搜索功能, 我有用户名、名称和地区, 所以谁能告诉我实现它的最佳方法。 它应该就像用户在搜索中输入的任何内容一样,脚本应该搜索数据库并获取所需的详细信息。 //我的代码在这里

<?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)
?>

以上是完整代码。

【问题讨论】:

  • 你能发一些代码吗?
  • 我尝试了简单的方法,即简单地获取用户名或地区或指定,然后按顺序执行。
  • 代码在哪里?

标签: php search mysqli


【解决方案1】:

利用 ajax 请求。 你的 MySql 查询应该是:

select * from user where uname like %username% or designation like %designation% or district like %district%

不要忘记使用参数化查询。

希望有帮助。

【讨论】:

  • 如何检查用户是否输入了用户名或名称或地区
  • 我已经用我的代码编辑了这个问题。看看
  • 而不是使用多个 if else 语句使用字符串连接。
  • 我的意思是大多数应用程序,如 Flipkart snapdeal 和所有。它看起来像糟糕的用户界面。如果你知道我的意思
  • 是的,我刚刚检查了您的代码,而不是使用多个 if else 语句使用字符串连接
【解决方案2】:

首先,您需要更改 !emptyempty 而不是 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"));
}

?>

【讨论】:

  • 感谢您的回答,但我仍然必须自己设置 $_POST['something']。没有办法将整个数据库检查并找出匹配项在哪里。
  • 您遇到了什么问题?
  • 我想自动检测用户正在搜索的内容,然后将其与 sql db 进行匹配。
  • 这只是你需要发出ajax请求的mysql查询
  • 非常感谢你。它就像魅力一样。你真的让我的生活变得轻松,谢谢吨
【解决方案3】:

试试这个..我会执行它。

`$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;
    }`

【讨论】:

  • 向我展示了这个解析错误:语法错误,第 8 行 C:\xampp\htdocs\sr.php 中的意外 '$stmt' (T_VARIABLE)
  • 尝试添加 $stmt=null;并重新检查逗号、引号和分号,因为我没有执行它。
  • 第 9 行 C:\xampp\htdocs\sr.php 中的布尔值调用成员函数 bind_param()
  • prepare() 方法可能返回 false,您应该检查一下。至于为什么返回false,可能是表名或列名(在SELECT或WHERE子句中)不正确?
  • 我认为它绝对完美。它不应该返回 false。
猜你喜欢
  • 2019-11-16
  • 2011-03-21
  • 2012-10-23
  • 1970-01-01
  • 2018-10-06
  • 2019-07-24
  • 2010-11-02
  • 2017-09-13
  • 1970-01-01
相关资源
最近更新 更多