PHP select * where like

use*_*305 7 php sql search select

嗨,我正在尝试为一个网站进行搜索。它有 2 个用于获取信息的输入,一个是下拉菜单。

<div id="search">
<form action="projectsearchall.php" method="post" enctype="multipart/form-data">
<h3>Search for an Item</h3>

<p>Keywords</p><p><input name="keywords" type="text" value="keywords"></p>


<p>Select A Location</p><p>

<select name="location" id="jumpMenu">
 <option>Any Location</option>
 <option>Antrim</option>
 <option>Armagh</option>
 <option>Carlow</option>
 <option>Cavan</option>


</select>
</p>
<p>
Run Code Online (Sandbox Code Playgroud)

</form>
</div>
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚如何组合 2 个输入来给出结果,我可以单独进行,但不能一起工作以获得更准确的结果。

php

$keywords = $_POST['keywords'];
$keylocation =$_POST['location'];
$username = $_SESSION['username'];

   //MySQL Database Connect
 include 'connect.php';
 //make sql query

$result = mysqli_query($con,"SELECT * FROM projectitem where description  like '%$keywords%'  or item like '%$keywords%' or location like '%$keywords%'");
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Ja͢*_*͢ck 3

$keylocation您实际上并没有使用;的值 要缩小搜索范围,您需要AND代替OR

$stmt = mysqli_prepare($con, 'SELECT * FROM projectitem 
    where (description LIKE ? OR item LIKE ?) AND location LIKE ?');

mysqli_stmt_bind_param($stmt, 'sss', "%$keywords%", "%$keywords%", "%$keylocation%");

mysqli_stmt_execute($stmt);

// etc.
Run Code Online (Sandbox Code Playgroud)

更新

由于下拉列表可能具有“任何位置”,因此您需要动态更改查询:

$sql = 'SELECT * FROM projectitem WHERE 1'; // base query

$types = ''; $vars = array();

if (!empty($keywords)) {
    $sql .= ' AND (description LIKE ? OR item LIKE ?)';
    $types .= 'ss';
    $vars[] = "%$keywords%";
    $vars[] = "%$keywords%";
}

if ($keylocation != 'Any Location') {
    $sql .= ' AND location LIKE ?';
    $types .= 's';
    $vars[] = $keylocation;
}

$stmt = mysqli_prepare($con, $sql);
if ($types) {
    mysqli_stmt_bind_param($stmt, $types, $vars);
}
mysqli_stmt_execute($stmt);
Run Code Online (Sandbox Code Playgroud)