php - 使用 PHP 和 MySQL 进行搜索过滤

标签 php mysql

我正在编写一个搜索过滤器,它将采用条件列表、查询数据库并返回匹配的用户名数组。这基本上就是我正在做的事情:

if (!empty($_GET['cat'])) {
    $category = urldecode($_GET['cat']);
    $category_query = "SELECT DISTINCT username FROM tutor_subjects_taught WHERE category = '{$category}'";
    $category_process = mysql_query($category_query);
    while ($row2 = mysql_fetch_assoc($category_process)) {
        $usernames[] = $row2['username'];
    }
}

这会从 URL 中获取设置的类别,并在数据库中查询与此匹配的用户名,并将其放入数组中。

现在,我需要做的是使用额外的“过滤器”来缩小这些用户名的范围。我的问题是:如果 $usernames 数组已设置,如何创建一个循环查询来检查每个用户名,然后返回匹配的子集数组?

例如,假设 $usernames 已由前面的代码设置,因为我们已经设置了 $_GET['cat'] 变量。现在我们添加另一个 $_GET 变量“rev”:

if (!empty($_GET['rev']) && isset($usernames)) {
    //Need to create loop here that will take all usernames in array from the previous block of code, check them for rev matching specific number, and return those that match into the $usernames array.
}

最佳答案

首先,你不应该使用mysql。使用mysqli反而。这提高了您网站的安全性。这将使黑客更难利用 SQL 注入(inject)。

对于过滤,您可以通过在开始时设置所有过滤器来将所有内容合并到一个查询中。创建一个 $filter 变量来保存所有值。

示例:

$filters = array();

if (!empty($_GET['cat'])) {
    $category = urldecode($_GET['cat']);
    $filter[] = 'category = ' . $category;
}

if (!empty($_GET['rev'])) {
    $anotherFilter = urldecode($_GET['rev']);
    $filters[] = 'anotherFilter = ' . $anotherFilter;
}

$filter = implode(' AND ', $filters);
$filter = $mysqli->real_escape_string($filter);

$mysqli = new mysqli('localhost', 'username', 'password', 'database');
$stmt = $mysqli -> prepare("SELECT DISTINCT username FROM tutor_subjects_taught WHERE '$filter'");
$stmt -> execute();
$stmt -> bind_result($username);
/* fetch values */
    while ($stmt->fetch()) {
        printf ("%s\n", $username);
    }
$stmt -> close();
$mysqli -> close();

关于php - 使用 PHP 和 MySQL 进行搜索过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14244527/

相关文章:

PHP/MySQL 更新,忽略空/空白值

jquery - MYSQL WHERE EXISTS 执行时间过长

mysql - 如何将 MySQL count(*) 与 Order by 子句和 limit 一起使用?

php - 为什么mysql查询只返回一行

php - 简短的 php/mysql 查询删除两个表选择的位置

javascript - 尝试从外部 php 文件标记数据创建谷歌地图 api 集群

php - 无法从数据库中删除

php - 每次插入MySQL数据库的IP都会改变

javascript - 如何让 CakePHP 在按下 Enter 时发送第二个提交按钮?

php - 如何在php中的两个不同数据库的两个不同表中插入数据