gpt4 book ai didi

php - 与此 MySQLi/PHP 代码段的可维护性作斗争

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

我有一段代码可以运行,但是它非常困惑。目标是从用户搜索中检索所有相关行。例如:如果用户搜索“Jo”,它将检索 John 和 Josh:

有效代码:

if($_SERVER["REQUEST_METHOD"] == "POST") {
$search = trim(filter_input(INPUT_POST,"user_search",FILTER_SANITIZE_SPECIAL_CHARS));
$search = preg_replace("#[^0-9a-z]#i", "", $search);

if(!isset($error_message)) {
$query = $db->query("SELECT * FROM User WHERE U_Forename LIKE '%$search%'
OR U_Surname LIKE '%$search%' OR U_Team LIKE '%$search'
OR U_City LIKE '%$search%'");
}
}

<?php
if ($query->num_rows == 0) {
$output = "No results found!";
} else {
echo "<h2>Search results for: " . $search . "</h2>";
while($row = $query->fetch_assoc()) {
$id = $row['U_ID'];
$firstname = $row['U_Forename'];
$lastname = $row['U_Surname'];
$team = $row['U_Team'];
$city = $row['U_City'];
echo "<div class='searchresults'>";
echo "<p> Name: " . ucfirst($firstname) . " " . ucfirst($lastname) . "</p>";
echo "<p> Favourite Team: " . ucfirst($team) . "</p>";
echo "<p> Location: " . ucfirst($city) . "</p>";
echo "<a class='lift' href='profile.php?=[$id]'>View Profile</a>";
echo "<a class='lift' href='#'>Follow Driver</a>";
echo "</div>";
}
}
?>

我尝试过的:

function getSearchResults($search) {
global $db;
$searchArray = array();
$query = $db->query("SELECT * FROM User WHERE U_Forename LIKE '%$search%'
OR U_Surname LIKE '%$search%' OR U_Team LIKE '%$search'
OR U_City LIKE '%$search%'");
if ($query->num_rows == 0) {
echo "No results found!";
} else {
while($row = $query->fetch_assoc()) {
$searchArray['U_ID'] = $row['U_ID'];
$searchArray['U_Forename'] = $row['U_Forename'];
$searchArray['U_Surname'] = $row['U_Surname'];
$searchArray['U_Team'] = $row['U_Team'];
$searchArray['U_City'] = $row['U_City'];
}
}
return $searchArray;
}

然而,这不会起作用,因为只有 fetch_assoc() 的第一个结果存储在 $searchArray 中,没有其他任何东西!有没有人有什么建议?我不确定接下来从哪里开始编码。

詹姆斯。

最佳答案

每次运行循环时都会覆盖数组。您需要创建一组数组,以便可以返回一个数组。下面,我简化了您的代码,将当前行附加到您要返回的数组中。然后您可以对返回的数据执行 foreach 并显示您的代码

while($row = $query->fetch_assoc()) {
$searchArray[] = $row;
}

此外,一个提示:将您的数据库连接器作为参数传递并避免将其用作全局(这是另一个最佳实践)

function getSearchResults($search) {
global $db;

成为

function getSearchResults($search, $db) {

最后但同样重要的是,不要让你的函数回显东西(让调用这个函数的层来做)。相反,只返回一个空数组

if ($query->num_rows == 0) {
return $searchArray;
}

关于php - 与此 MySQLi/PHP 代码段的可维护性作斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36559389/

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