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

PHP+AJAX程序无法加载数据库中作者书籍数据至表格,求排查建议

排查与修复:PHP+AJAX书籍数据无法显示的问题

嘿,我帮你梳理了代码里的关键问题,应该能解决数据不显示的情况:

1. 最致命的SQL查询错误

你第二个查询里的条件写死成了空字符串!看这里:

$q2 .= " AND wrote.author_number = ' ' ";

这相当于找author_number为空的作者,完全没用到你从URL获取的$authorid,当然查不到匹配数据。赶紧改成用传入的作者ID:

$q2 .= " AND wrote.author_number = " . $authorid;

如果要更安全(防止SQL注入),推荐用预处理语句,代码重构如下:

$q2 = "SELECT wrote.author_number As ANo, wrote.book_code As BookCd, book.book_title As Title 
       FROM wrote
       INNER JOIN book ON wrote.book_code = book.book_code 
       WHERE wrote.author_number = ? 
       ORDER BY book.book_title";

$stmt = mysqli_prepare($dbc, $q2);
mysqli_stmt_bind_param($stmt, "i", $authorid); // "i"表示参数是整数类型
mysqli_stmt_execute($stmt);
$r2 = mysqli_stmt_get_result($stmt);

2. 循环逻辑优化+空数据提示

你现在的while循环写法有点冗余,而且如果查询没结果,表格里啥都没有,用户根本分不清是没数据还是出错了。改成这样更清晰:

// 替换原来的while循环部分
if (mysqli_num_rows($r2) > 0) {
    while ($row = mysqli_fetch_array($r2)) {
        echo "<tr>";
        echo "<td>" . htmlspecialchars($row['BookCd']) . "</td>";
        echo "<td>" . htmlspecialchars($row['Title']) . "</td>";
        echo "</tr>";
    }
} else {
    echo "<tr><td colspan='2'>该作者暂无书籍记录</td></tr>";
}

另外加了htmlspecialchars()是为了防止XSS攻击,让代码更安全。

3. 增加错误调试信息

你现在没有任何数据库查询的错误处理,万一SQL写错或者数据库连接出问题,你根本不知道哪里错了。给每个查询加上错误检查:

// 比如第二个查询后(如果用普通查询的话)
$r2 = mysqli_query($dbc, $q2);
if (!$r2) {
    die("查询失败:" . mysqli_error($dbc));
}

这样一旦查询出错,会直接显示错误信息,方便你快速定位问题。

4. AJAX相关排查(因为你提到用了AJAX)

如果是通过AJAX调用这个PHP页面,还要确认这几点:

  • AJAX请求的URL是否正确带上了authorid参数,比如yourpage.php?authorid=123
  • 打开浏览器控制台(F12),查看Network标签里的AJAX请求,是否返回200状态码,响应内容是否符合预期
  • 可以在PHP开头加一句var_dump($_GET['authorid']);,看看是否正确获取到了参数值

5. 冗余代码优化(可选)

你第一个查询SELECT * FROM author只取了一行,但根本没用到,比如表格标题可以显示作者名字,改成这样更合理:

$query = "SELECT author_name FROM author WHERE author_number = " . $authorid;
$r = mysqli_query($dbc, $query);
if (mysqli_num_rows($r) > 0) {
    $row = mysqli_fetch_array($r);
    $authorName = $row['author_name'];
} else {
    echo "未找到该作者<br>";
    exit; // 没有作者的话直接终止,不用执行后面的查询
}

// 然后表格标题改成:
echo "<table border='1'><caption>Titles for " . htmlspecialchars($authorName) . "</caption>";

按上面的步骤改完,应该就能正常显示数据了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:49:31