You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP+SQL商品搜索功能失效求助:无法查询Products表描述字段

问题排查与修复方案

你的代码存在几个关键错误,直接导致搜索功能失效,以下是问题点和修复方案:

核心错误点

  1. SQL查询用了精确匹配而非模糊匹配:原代码中WHERE Description = ?是精确匹配,无法实现你需要的模糊查询效果,必须替换为LIKE关键字。
  2. 搜索字符串未正确关联用户输入:$SqlSearchString = "%searchString%";是硬编码字符串,没有引用变量$searchString,导致实际查询的是包含"searchString"字面量的内容,而非用户输入的关键词。
  3. 空搜索逻辑错误:当用户未输入搜索词时,未设置正确的通配符来返回全部商品。

修复后的完整代码

<!doctype html>
<html>
<head>
    <meta charset="UTF-8" /> 
    <title>My First SQL Page</title>
    <link rel="stylesheet" type="text/css" href="shopstyle.css" />
</head>
<body>
    <h1>Products List</h1>
    <?php 
        
        include('functions.php');
        
        // 简化搜索字符串赋值逻辑
        $searchString = isset($_GET['search']) ? $_GET['search'] : "";
        
        // 为用户输入添加模糊查询通配符
        $SqlSearchString = "%{$searchString}%";
        $safeSearchString = htmlspecialchars($searchString, ENT_QUOTES,"UTF-8");
        
        echo "<form>";
        echo "<input name='search' type='text' value='$safeSearchString'/>";
        echo "<input type='submit'/>";
        echo "</form>";
        
        $dbh = connectToDatabase();
        
        // 修改为LIKE实现模糊查询
        $sql = "SELECT * FROM Products WHERE Description LIKE ?";
        
        $statement = $dbh->prepare($sql);
        // 绑定带通配符的搜索字符串
        $statement->bindValue(1, $SqlSearchString, PDO::PARAM_STR);
        
        $statement->execute();

        while($row = $statement->fetch(PDO::FETCH_ASSOC))
        {
            $ProductID = htmlspecialchars($row['ProductID'], ENT_QUOTES, 'UTF-8'); 
            $Price = htmlspecialchars($row['Price'], ENT_QUOTES, 'UTF-8'); 
            $Description = htmlspecialchars($row['Description'], ENT_QUOTES, 'UTF-8'); 
            
            echo "<div class='productBox'>";
            echo "<img src='/ProductPictures/$ProductID.jpg' />";
            echo "$Description <br/>";
            echo "$Price <br/>";
            echo "</div>";           
        }
    ?>
</body>
</html>

额外说明

  • 用三元运算符简化了$searchString的赋值逻辑,代码更简洁。
  • 修复了$statement ->bindValue中的空格问题,符合PHP语法规范。
  • 保留了你原有的XSS防护逻辑(htmlspecialchars),这是防止恶意脚本注入的正确做法。

内容的提问来源于stack exchange,提问作者Nicko Toumbas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:52:40