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

使用变量ID查询数据库后file_get_contents无法显示数据求助

解决SQL拼接后页面显示为空的问题

先别急,咱们一步步排查问题,从最可能的根源入手:

1. 先确认SQL查询是否真的拿到了数据

你说$myrow[0]的值是2,但拼接后的SQL可能没你想的那么“干净”,或者查询本身就没返回结果。先加几行调试代码看看:

$query = "SELECT * FROM data where data.id=".$myrow[0]."";
// 先输出实际执行的SQL,看看是不是真的是SELECT * FROM data where data.id=2
echo "执行的SQL: " . $query . "<br>"; 

$result = mysqli_query($mysqli, $query);
// 检查SQL是否执行成功
if (!$result) {
    die("SQL执行出错: " . mysqli_error($mysqli));
}

$rows = mysqli_fetch_row($result);
// 检查是否拿到了记录
if (!$rows) {
    echo "没有找到id为" . $myrow[0] . "的记录";
    exit;
}
// 输出拿到的结果,确认$rows[1]有值
echo "查询到的rows[1]值: " . $rows[1] . "<br>";

$homepage = file_get_contents('my page');
echo $homepage;

运行这段代码后,你就能明确:

  • SQL语句是不是正确(有没有隐形字符,比如空格、换行、奇怪的符号)
  • SQL有没有执行错误
  • 到底有没有拿到id=2的记录
  • $rows[1]是不是真的有值

如果发现SQL里的id不是纯2(比如是" 2"或者"2\n"),那先对$myrow[0]做清理:

$clean_id = (int)trim($myrow[0]); // 先去掉前后空白,再转成整数
$query = "SELECT * FROM data where data.id=" . $clean_id;

2. 检查页面内容的变量替换逻辑

你说页面'my page'包含$rows[1],但这里有个关键问题:用file_get_contents读取文件,只会拿到原始字符串,不会自动解析PHP变量。

举个例子,如果'my page'是个PHP文件,里面写的是<?php echo $rows[1]; ?>,用file_get_contents读出来的就是这个字符串本身,不会变成$rows[1]的实际值——除非你是通过HTTP请求访问这个页面(比如file_get_contents('http://yourdomain/my page.php'),这时候服务器会先解析PHP再返回内容)。

解决办法分两种:

方法一:用include/require代替file_get_contents

如果'my page'是PHP文件,直接引入它,PHP会自动解析里面的变量:

// 先确保$rows已经拿到了数据
$display_value = $rows[1];
include 'my page.php'; // 页面里直接用<?= $display_value ?>或者<?php echo $display_value; ?>

方法二:手动替换字符串

如果'my page'是静态文件(比如HTML),里面用了占位符(比如{{rows1}}或者你原来的$rows[1]),那读完文件后手动替换:

$homepage = file_get_contents('my page');
// 把页面里的占位符替换成实际值
$homepage = str_replace('$rows[1]', $rows[1], $homepage);
echo $homepage;

3. 别再用SQL拼接了,用预处理语句更安全还能避免坑

不管这次问题是什么,直接拼接SQL都有SQL注入的风险,而且很容易因为变量的格式问题出bug。换成预处理语句试试,从根源避免拼接的问题:

// 准备预处理语句
$stmt = mysqli_prepare($mysqli, "SELECT * FROM data WHERE data.id = ?");
// 绑定参数,"i"表示参数是整数类型
mysqli_stmt_bind_param($stmt, "i", $myrow[0]);
// 执行语句
mysqli_stmt_execute($stmt);
// 获取结果
$result = mysqli_stmt_get_result($stmt);
$rows = mysqli_fetch_row($result);
// 关闭语句
mysqli_stmt_close($stmt);

预处理语句会自动处理变量的格式问题,不管$myrow[0]有没有隐形字符,都能正确绑定参数,而且完全避免SQL注入。

按上面的步骤一步步排查,应该就能找到问题所在了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:22:43