Php 从不同的数据库表获取搜索结果并显示它们?
我正在尝试创建一个搜索功能,它将检索我们在网站上创建的不同海报的搜索结果。如果一个人正在搜索lets say dog,那么它将显示与狗相关的海报。该网站将以海报的形式发布不同的活动 目前代码如下所示: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
<?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变量的问题?这能解决那个问题吗?