- 此问题在此处已有答案**:
Mysql - how to use like on multiple columns(4个答案)
十小时前关门了。
我尝试使用PHP创建一个简单的搜索过程,从本地MYSQL数据库获取数据。问题是搜索查询返回数据库集合中的所有数据,即使我使用了LIKE运算符。例如,当我搜索**"Black"时,我希望返回带有cabuid****'3'**的项(见下图),但我最终得到了所有的项目回来。
我的数据库:
我的代码如下。
- 数据库包含. php**
<?php
$serverName = "localhost";
$dbUsername ="root";
$dbPassword ="";
$dbName = "webvacser";
$connection = mysqli_connect($serverName, $dbUsername, $dbPassword, $dbName );
if (!$connection) {
die("Connection failed: " . mysqli_connect_error());
}
?>
- 搜索. php**
<?php
include_once 'header.php';
?>
<div class="about-section">
<h1>Search</h1>
</div>
<form style="border:1px solid #ccc" method="post">
<div class="container">
<p>Type something to search.</p>
<hr>
<label for="search"><b></b></label>
<input type="text" placeholder="Enter Search" name="search" >
<div class="clearfix">
<button type="submit" name="search">Search</button>
</div>
<style>
{background: #f1f1f1;}
</style>
<?php
include __DIR__.'../includes/dbh.includes.php';
if (isset($_POST["search"])) {
$query = $_POST["search"];
$sql = "SELECT * FROM boots WHERE concat (cabname,cabdescription) LIKE '%".$query."%'";
$gotResults = mysqli_query($connection,$sql);
if($gotResults) {
if(mysqli_num_rows($gotResults)>0)
{
while($row = mysqli_fetch_array($gotResults)){
$cabname=$row['cabname'];
$cabdescription=$row['cabdescription'];
?>
<div class="row">
<div class="column">
<div class="card">
<img src="images/<?php echo $row['image']?>" style="width:100%">
<div class="container">
<h2>
<?php echo $row['cabname']; ?> </h2>
<p><?php echo $row['cabdescription']; ?></p>
<p><?php echo $row['cabprice']; ?> € </p>
<form style="border:1px solid #ccc" method="POST" enctype="multipart/form-data">
<p><button type="submit" class="button" name="add">Add to cart</button></p>
<input type='hidden' name='product_id' value="<?php echo $row['cabuid']; ?>">
</form>
</div>
</div>
</div>
<?php
}
}
}
}
?>
- 编辑:我已更改代码并使用搜索查询
"SELECT * FROM启动WHERE concat(cabname,cabdescription)类似于' %". $query."%'";
并尝试运行查询
$sql ="SELECT * FROM启动WHERE cabname类似于' %". $query." %'或cabdescription类似于' %". $query."%'";
然而问题仍然存在。我还注意到无论我搜索什么(即使我搜索'0000')我仍然会得到我的表的所有内容,这意味着搜索查询根本没有执行。也许我的数据库有问题?
3条答案
按热度按时间wooyq4lh1#
你设置
cabname
的方式被转换成了一个bool,因为它们都是非空字符串,所以都被转换成了true,然后你就有了一个or条件,这个条件可能在这一点上还没有执行。afdcj2ne2#
将查询从
$sql = "SELECT * FROM boots WHERE cabname OR cabdescription LIKE '%".$query."%'";
修改为$sql = "SELECT * FROM boots WHERE cabname LIKE '%".$query."%' OR cabdescription LIKE '%".$query."%'";
因为当前查询等于
SELECT (...) WHERE cabname NOT NULL OR cabdescription LIKE (...)
ryoqjall3#
请尝试以下操作:SELECT * FROM启动WHERE cabname LIKE '%".$query."%'或cabdescription LIKE '%".$query."%'