我试图做一个有多个输入的搜索系统。我试着在查询中选择数据,如果它存在,它应该添加额外的数据,但它不这样做,我搞砸了,不知道如何修复它。从我的其他文件的数据得到那里。我检查过了。有人知道我做错了什么吗?
<?php
$connect= mysqli_connect("localhost", "root", "root", "website");
$query = "SELECT * FROM data";
$sort = " date DESC"
if(isset($_GET["search"])){
$keywordsearch = $connect->escape_string($_GET['search']);
$query .= " WHERE name like '%$keywordsearch%'";
if(isset($_GET['tag'])){
$keywordtag = $connect->escape_string($_GET['tag']);
$query .= " AND tag like '%$keywordtag%'";
$query .= " ORDER BY $sort";
}
}
$result = mysqli_query($connect, $query);
while($row = mysqli_fetch_array($result)){
echo $row['name']."<br>";
}
?>
这可以通过创建一个传入数据的数组来完成,使用该数组,你可以控制所有其他要求建立一个查询,并使用Parameterised和绑定查询传递参数
$_GET = ['search'=> 'fluff', 'tag'=>'easy'];
$connect= mysqli_connect("localhost", "root", "root", "website");
$query = "SELECT * FROM data";
$sort = " ORDER BY date DESC";
if(isset($_GET["search"])){
$query .= " WHERE name like ?";
$vals[] = '%' . $_GET["search"] . '%';
}
if(isset($_GET['tag'])){
$query .= " OR tag like ?";
$vals[] = '%' . $_GET["tag"] . '%';
}
$query .= $sort;
$types = str_repeat('s', count($vals));
$stmt = $connect->prepare($query);
$stmt->bind_param($types, ...$vals);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_array(MYSQLI_ASSOC)){
echo $row['name']."<br>";
}
结果。
easy peasy<br>
fluff fluff<br>
根据你的评论。 问题是,我可以输入标签变量 如果标签变量是数据库中没有的东西,它就什么都不显示了
那是因为你使用的是一个 AND
而非 OR
在查询中。我也纠正了这一点