使用PHP和MySQL搜索过滤

时间:2013-01-09 19:02:19

标签: 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中获取set类别,并在数据库中查询与此匹配的用户名,并将其放入数组中。

现在,我需要做的是使用额外的“过滤器”来缩小这些用户名。我的问题是:如果已经设置了$ 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.
}

1 个答案:

答案 0 :(得分:1)

首先,你不应该使用mysql。请改用mysqli。这可以提高您网站的安全性。这将使黑客更难使用SQL注入。

对于过滤,您可以通过在开头设置所有过滤器在一个查询中完成所有过滤。在保存所有值的位置创建一个$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();