gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:06:40 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com