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

PHP与MySQL搜索:无法从数据库获取完整数据求助

问题分析与解决方案

先帮你解决当前点击链接后无法获取数据的核心问题,再实现你需要的搜索功能。

一、修复详情页无法获取数据的问题

你的read.php存在几个关键问题:

  1. 缺失数据库连接代码:列表页里你写了数据库连接逻辑,但详情页完全没这段代码,导致$connection变量不存在,数据库查询根本执行不了。
  2. 使用已废弃的mysql_*函数:PHP早就淘汰了这套函数,安全性和兼容性都很差,我帮你换成mysqli扩展(保持和你原有代码的面向过程风格一致)。
  3. SQL注入风险:直接把$_GET['id']拼进SQL语句,恶意用户可以轻易篡改你的数据库,必须用预处理语句规避。

修改后的详情页代码(read.php)

<?php
// 第一步:先建立数据库连接,和列表页配置一致
$connection = mysqli_connect("localhost", "root", "", "vdl");
// 检查连接是否成功
if (!$connection) {
    die("数据库连接失败: " . mysqli_connect_error());
}

if (isset($_GET['id'])) {
    // 使用预处理语句防止SQL注入
    $id = $_GET['id'];
    $stmt = mysqli_prepare($connection, "SELECT * FROM digital_library WHERE company_id = ?");
    mysqli_stmt_bind_param($stmt, "i", $id); // "i"表示参数是整数类型,如果是字符串就改成"s"
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    $row1 = mysqli_fetch_assoc($result); // 根据id查询应该只有一条数据,不用while循环

    if ($row1) {
?>
<span>Company Name: </span> <?php echo htmlspecialchars($row1['company_name']); ?><br><br>
<span>Since: </span> <?php echo htmlspecialchars($row1['since']); ?><br><br>
<span>Strength: </span> <?php echo htmlspecialchars($row1['strength']); ?><br><br>
<span>Head Quarters: </span> <?php echo htmlspecialchars($row1['head_quarter']); ?><br><br>
<span>Location (City): </span> <?php echo htmlspecialchars($row1['locations']); ?><br><br>
<span>Development Centers: </span> <?php echo htmlspecialchars($row1['development_centers']); ?><br><br>
<span>Customers: </span> <?php echo htmlspecialchars($row1['customers']); ?><br><br>
<span>MNC: </span> <?php echo htmlspecialchars($row1['mnc']); ?><br><br>
<span>CMMI: </span> <?php echo htmlspecialchars($row1['cmmi']); ?><br><br>
<span>Domains: </span> <?php echo htmlspecialchars($row1['domains']); ?><br><br>
<span>Industries: </span> <?php echo htmlspecialchars($row1['industries']); ?><br><br>
<span>Domain Competitors: </span> <?php echo htmlspecialchars($row1['domain_competitor']); ?><br><br>
<span>Products: </span> <?php echo htmlspecialchars($row1['products']); ?><br><br>
<span>Services: </span> <?php echo htmlspecialchars($row1['services']); ?><br><br>
<span>Uniqueness: </span> <?php echo htmlspecialchars($row1['uniqueness']); ?><br><br>
<span>Company URL: </span> <a target='_blank' href="<?php echo htmlspecialchars($row1['url']); ?>">
<?php echo htmlspecialchars($row1['url']); ?>
</a><br><br>
<!--<span>Company Logo:</span> <?php echo htmlspecialchars($row1['logo']); ?><br><br>-->
<span>Onsight: </span> <?php echo htmlspecialchars($row1['onsight']); ?><br><br>
<span>Benefits: </span> <?php echo htmlspecialchars($row1['benefits']); ?><br><br>
<span>Awards: </span> <?php echo htmlspecialchars($row1['awards']); ?><br><br>
<?php
    } else {
        echo "没有找到对应的公司信息";
    }
    // 关闭语句和连接
    mysqli_stmt_close($stmt);
    mysqli_close($connection);
} else {
    echo "请通过正确的链接访问";
}
?>

二、修改列表页并添加搜索功能

我同时把列表页的代码也换成mysqli,并加入搜索功能:

<?php
$connection = mysqli_connect("localhost", "root", "", "vdl");
if (!$connection) {
    die("数据库连接失败: " . mysqli_connect_error());
}

// 构建查询语句,支持搜索
$query = "SELECT * FROM digital_library";
// 如果有搜索关键词,拼接模糊匹配条件
if (isset($_GET['search']) && !empty(trim($_GET['search']))) {
    $search = mysqli_real_escape_string($connection, trim($_GET['search']));
    // 可以根据需求调整匹配的字段,比如公司名称、领域、行业等
    $query .= " WHERE company_name LIKE '%$search%' OR domains LIKE '%$search%' OR industries LIKE '%$search%'";
}

$result = mysqli_query($connection, $query);
?>
<!-- 搜索表单 -->
<form method="GET" action="" style="margin-bottom: 20px;">
    <input type="text" name="search" placeholder="搜索公司名称/领域/行业..." value="<?php echo isset($_GET['search']) ? htmlspecialchars($_GET['search']) : ''; ?>">
    <button type="submit">搜索</button>
</form>

<ul>
<?php
while ($row = mysqli_fetch_assoc($result)) {
    // 用htmlspecialchars防止XSS攻击
    $companyName = htmlspecialchars($row['company_name']);
    $companyId = htmlspecialchars($row['company_id']);
    echo "<li><b><a href='read.php?id={$companyId}'>{$companyName}</a></b></li><br>";
}
// 关闭数据库连接
mysqli_close($connection);
?>
</ul>

额外提示

  • 建议把数据库连接信息单独写到一个配置文件(比如config.php),然后在列表页和详情页里用include 'config.php'引入,避免重复代码。
  • 如果你的company_id是字符串类型,记得把详情页预处理语句里的参数类型从i改成s。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:24:07