Php 从不同的数据库表获取搜索结果并显示它们?

Php 从不同的数据库表获取搜索结果并显示它们?,php,html,mysql,sql,search,Php,Html,Mysql,Sql,Search,我正在尝试创建一个搜索功能,它将检索我们在网站上创建的不同海报的搜索结果。如果一个人正在搜索lets say dog,那么它将显示与狗相关的海报。该网站将以海报的形式发布不同的活动 目前代码如下所示: <?php class Search { public static $con; private $search = ''; function __construct() { self::$con = mysqli_connect('l

我正在尝试创建一个搜索功能,它将检索我们在网站上创建的不同海报的搜索结果。如果一个人正在搜索lets say dog,那么它将显示与狗相关的海报。该网站将以海报的形式发布不同的活动

目前代码如下所示:

<?php

class Search
{
    public static $con;

    private $search = '';

    function __construct()
    { 
        self::$con = mysqli_connect('localhost', 'guest', 'guestpw', 'db_users');

        $this->search = mysqli_real_escape_string(self::$con, $_POST['search']);
    }

    if(isset($_POST['submit_search']))
    {

    $sql = mysqli_query($con, "SELECT * FROM Event WHERE eventNamn LIKE '%" . $search);

    $sql = mysqli_query($con, "SELECT * FROM Användare WHERE userName LIKE '%" . $search);

    $sql = mysqli_query($con, "SELECT * FROM Poster WHERE Kategori LIKE '%" . $search);

    $sql = mysqli_query($con, "SELECT * FROM EventTyp WHERE EventTyp LIKE '%" . $search);

    $result = mysqli_query($sql);

    }
}
我现在想做的是使用用户正在搜索的搜索词,然后显示与该词关联的事件。 非常感谢您的帮助!谢谢。

您可能需要使用UNION或UNION ALL运算符。SQL UNION运算符组合两个或多个SELECT语句的结果

 SELECT col FROM Event WHERE ...
 UNION ALL
 SELECT col FROM User WHERE ...
文件如下: MYSQL联合运算符:

您的代码可以如下所示:

$sql  = "SELECT [your column] AS event FROM Event WHERE eventNamn LIKE '%" . $search . "'".
    "UNION ALL ".
    "SELECT [your column] AS event FROM Användare WHERE userName LIKE '%" . $search . "'".
    "UNION ALL".
    "SELECT [your column] AS event FROM Poster WHERE Kategori LIKE '%" . $search . "'".
    "UNION ALL".
    "SELECT [your column] AS event FROM EventTyp WHERE EventTyp LIKE'%" . $search . "'";

$result = mysqli_query($con,$sql);

while($row = mysqli_fetch_array($result)) {
  echo $row['event '];
  echo "<br>";
}
mysqli_close($con);

希望这能有所帮助。

您现在使用的代码不起作用。您正在类中检查$\u POST请求?我做了一些调整

<?php

class Search
{
    public static $con;
    private $search = '';

    public function __construct($search)
    { 
        self::$con = mysqli_connect('localhost', 'guest', 'guestpw', 'db_users');

        $this->search = mysqli_real_escape_string(self::$con, $search);
    }

    //Do this for every search

    public function search() {
       $sql = mysqli_query(self::$con, "SELECT [column] FROM Event WHERE eventNamn LIKE '%" .       $search . "'".
"UNION ALL ".
"SELECT [column] FROM Användare WHERE userName LIKE '%" . $search . "'".
"UNION ALL".
"SELECT [column] FROM Poster WHERE Kategori LIKE '%" . $search . "'".
"UNION ALL".
"SELECT [column] FROM EventTyp WHERE EventTyp LIKE'%" . $search . "'");
       return mysqli_query($sql);
    } 
}

if(isset($_POST['search'])) {

  $searchClass = new Search($_POST['search']);
  $result = $searchClass->searchEvent();

}

1.不要依赖mysqli转义字符串。使用事先准备好的陈述。它既快又简单

2.您可以在一个查询中轻松地从多个表中进行选择

public $mysqli; //make sure your connection is available

public $result = NULL;//setup your result variable
public $search = NULL;
public function getresults() //pass your connection to the object
{
    $search = $_POST["search"]; //post is a super global. no need to pass it by reference

    $result = array();//create an array to store the search results in

    $mysqli = $this->mysqli;//define mysqli so you can access the property of your class object. 

    //construct mysqli in your __construct call, and return it.

    $stmt = $mysqli->prepare("SELECT column1,column2,column3,column4 
                                FROM Event,Användare,Poster,Eventyp 
                                WHERE eventNamn LIKE '% ?';");//prepare our query

    $stmt->bind_param('s', $this->search); 

    //bind our search parameters to the question mark in the query. 
    //if you have multiple querystrings, they must be bound in order.
    if($stmt->execute())//execute prepared statment
    {
        $stmt->bind_result($col1,$col2,$col3,$col4);//bind the selected column results to variables. 
        //these also must be bound in order
        if($stmt->num_rows > 0)
        {
            $result[] = array('type'=> 'success','result' => $stmt->num_rows, 'search string' => $search); //success!
            while($row = $stmt->fetch()) //never use get_result to fetch your statement. always use fetch.
            {
                $result[] = array('type' => 'result', 
                                  'column1' => $col1 ,
                                  'column2' => $col2 ,
                                  'column3' => $col3 , 
                                  'column4' => $col4); //store each result row in an array.
            }
            $stmt->close();//close the connection
        }else{
            $result[] = array('type'=> 'emptyresult','result' => 'No Results Found', 'search string' => $search); //No Results!
        }
    }else{
        $result[] = array('type'=> 'error','result' => 'Error with query', 'search string' => $search); //No Results!
    }
    return $result;//finally return our result for further processing
}

每次都替换变量$sql,因此只执行最后一个变量。首先,反复重新分配$sql变量。搜索变量上的对象范围错误,您应该使用$this->search。正如@mplungjan所说的,每次您赋予$sql一个新的含义时,您都会覆盖它。因此,当你创建了第四个$SQL,只存在一个“存在”时,前一个将“消失”。你错过了查询中所有变量的关闭单引号。也考虑使用准备好的语句-直接构建这样的查询字符串是不安全的。谢谢你的回答。你的意思是让我为每个查询创建一个函数吗?像公共函数searchName、searchEvent等?只有3个其他函数searchAnvändare、searchPoster和searchEventTyp@Daan Super Globals在任何范围内都可用,甚至在类中也是如此。@r3wt是的,这不是我的意思。我的意思是它看起来不干净。@Daan哦,我同意,但这不是问题所在。OP还不懂PHP,但至少他/她正在尝试。谢谢你的回答。使用UNION或UNION ALL后如何显示搜索结果?如何解决替换$sql变量的问题?这能解决那个问题吗?