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

PHP点击表格值传参 执行SQL LIKE条件查询实现方案

需求说明

我在站点中通过SQL JOIN查询生成数据表格,为其中一列配置了跳转至其他页面的链接,需要实现:点击表格内对应数据时,将被点击的值作为SQL查询的LIKE条件参数,从另一张数据表中查询匹配结果。我是开发新手,若问题表述存在模糊之处敬请谅解,现有三段业务实现代码,求可行的实现建议。

现有业务代码

第一张表(搜索功能生成)

require_once "db.php";
if(isset($_GET['term']))
    {   

    $term = '%' . $_GET['term'] . '%';
    $noresult = array(
      "MFG_Item_ID" => "",
      "MFG_Simple" => "No Results",
  );

    $sql = "SELECT * FROM Main_Search WHERE SearchName LIKE ? LIMIT 10";

    $stmt = $conn->prepare($sql); 
    $stmt->bind_param("s", $term);   
    $stmt->execute();
    $result = $stmt->get_result();
      while($row = $result->fetch_assoc()) {
        echo "<td>" . $row["MFG_Simple"] . "</td>";
        echo "<td>" . $row["Parent"] . "</td>";
        echo "<td>" . $row["MFG_Item_ID"] . "</td>";
        echo "<td>" . $row["Description"] . "</td>";
        echo "<td>" . $row["UOM"] . "</td>";
        echo "<td>" . $row["Conversion"] . "</td>";
        echo "<td>" . "$ " . $row["Average_Price"] . "</td>";
        echo "<td>" . "$ " . $row["Best_Price"] . "</td>";

         }
  
     }
?>     

First Table

第二张表(展示第一张表数据的多个来源,点击合同号时需要将对应值作为下一个查询的LIKE参数)

$sql1 = "SELECT Full_Item_Master.Source, Full_Item_Master.Contract_Number, Full_Item_Master.Price_Effective, 
Full_Item_Master.Price_Expiration, Full_Item_Master.UOM, Full_Item_Master.Conversion, Full_Item_Master.Average_Price, Full_Item_Master.Min_Price
FROM Full_Item_Master
JOIN Main_Search
ON Full_Item_Master.MFG_ID = Main_Search.MFG_ID
AND Full_Item_Master.MFG_Item_ID = Main_Search.MFG_Item_ID
AND Full_Item_Master.UOM = Main_Search.UOM
WHERE Main_Search.SearchName LIKE ? LIMIT 10";

$stmt = $conn->prepare($sql1); 
$stmt->bind_param("s", $term);   
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc()) {
    echo "<td>" . $row["Source"] . "</td>";
    echo "<td><a target='_blank' rel='noopener noreferrer' href='contracts.php?term=?'>" . $row["Contract_Number"] . "</td>";
    echo "<td>" . $row["Price_Effective"] . "</td>";
    echo "<td>" . $row["Price_Expiration"] . "</td>";
    echo "<td>" . $row["UOM"] . "</td>";
    echo "<td>" . $row["Conversion"] . "</td>";
    echo "<td>" . "$ " . $row["Average_Price"] . "</td>";
    echo "<td>" . "$ " . $row["Min_Price"] . "</td>"; ?>
        <td><button type="button" class="btn btn-primary">View</button></td>
    </tr><?php

     }
$conn->close(); 

Table 2

第三张表(跳转目标页现有代码)

$term = '%' . $_GET['term'] . '%';
    

$sql = "SELECT * FROM Full_Item_Master WHERE Contract_Number LIKE (需要传入点击的链接对应值) LIMIT 100";

$stmt = $conn->prepare($sql); 
$stmt->bind_param("s", $term);   
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc()) {
    echo "<td>" . $row["MFG_Simple"] . "</td>";
    echo "<td>" . $row["Parent"] . "</td>";
    echo "<td>" . $row["MFG_Item_ID"] . "</td>";
    echo "<td>" . $row["Description"] . "</td>";
    echo "<td>" . $row["UOM"] . "</td>";
    echo "<td>" . $row["Conversion"] . "</td>";
    echo "<td>" . "$ " . $row["Average_Price"] . "</td>";
    echo "<td>" . "$ " . $row["Min_Price"] . "</td>"; 
}
实现步骤
  • 修复第二张表的链接传参逻辑:当前a标签的href里term=?是硬编码的占位符,没有传入实际的合同号值,同时a标签缺少闭合标签,会导致页面结构错乱。将输出合同号单元格的代码替换为以下内容即可完成参数传递:
echo "<td><a target='_blank' rel='noopener noreferrer' href='contracts.php?term=" . urlencode($row["Contract_Number"]) . "'>" . htmlspecialchars($row["Contract_Number"]) . "</a></td>";

用urlencode()处理参数是为了避免合同号里包含特殊字符(比如空格、&、/)时出现传参丢失或错误,htmlspecialchars()是为了转义输出到HTML的特殊字符,避免页面渲染异常。

  • 完善第三张表的查询逻辑:现有代码已经具备接收GET参数拼接LIKE条件的基础能力,只需要补充参数校验、缺失标签和空结果提示即可,参考修改后代码:
require_once "db.php";
// 校验参数是否存在
if (!isset($_GET['term']) || !trim($_GET['term'])) {
    echo "<tr><td colspan='8'>请传入有效的合同号参数</td></tr>";
    exit;
}
// 拼接LIKE查询通配符
$term = '%' . trim($_GET['term']) . '%';

$sql = "SELECT * FROM Full_Item_Master WHERE Contract_Number LIKE ? LIMIT 100";

$stmt = $conn->prepare($sql); 
$stmt->bind_param("s", $term);   
$stmt->execute();
$result = $stmt->get_result();
// 处理无结果场景
if ($result->num_rows === 0) {
    echo "<tr><td colspan='8'>未查询到匹配的合同数据</td></tr>";
}
while($row = $result->fetch_assoc()) {
    // 补全缺失的行标签,避免表格样式错位
    echo "<tr>";
    echo "<td>" . htmlspecialchars($row["MFG_Simple"]) . "</td>";
    echo "<td>" . htmlspecialchars($row["Parent"]) . "</td>";
    echo "<td>" . htmlspecialchars($row["MFG_Item_ID"]) . "</td>";
    echo "<td>" . htmlspecialchars($row["Description"]) . "</td>";
    echo "<td>" . htmlspecialchars($row["UOM"]) . "</td>";
    echo "<td>" . htmlspecialchars($row["Conversion"]) . "</td>";
    echo "<td>" . "$ " . htmlspecialchars($row["Average_Price"]) . "</td>";
    echo "<td>" . "$ " . htmlspecialchars($row["Min_Price"]) . "</td>"; 
    echo "</tr>";
}
$conn->close();
  • 通用代码修复点:前两段表格输出代码都缺少每行开头的<tr>标签,循环输出单元格时记得在每行内容前后补全<tr>和</tr>,否则浏览器渲染表格时会出现样式错位、内容排版混乱的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:15:52