繁体   English   中英

Php 搜索多个值

[英]Php search with multiple values

我尝试制作一个具有多个输入的搜索系统。 我试图 select 查询中的数据,并且它假设添加附加数据(如果存在)但它不这样做。 我把它搞砸了,不知道如何解决它。 我的其他文件中的数据到达那里。 我检查了它。 有谁知道我做错了什么?

<?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>";
    }
    ?>

这可以通过创建传入的数据数组并使用该数组来完成,您可以控制所有其他要求来构建查询并使用参数化和绑定查询传递参数

$_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 我也更正了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM