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

PHP生成MySQL数据表失败求助:代码报错及问题排查

问题排查与修复方案

嘿,我帮你找出代码里的几个关键错误了,这些就是导致你看到的那些Trying to get property of non-object报错的根源,咱们一个个来理清楚:

1. SQL查询完全没正确执行

你这段代码把数据库查询的调用用单引号包成了字符串,相当于只是定义了一段文本,根本没让PHP去执行实际的数据库查询:

$abfrage='$dblink,"SELECT * FROM database"';
$ergebnis='mysqli_query($abfrage)';

这里的$ergebnis只是个普通字符串,不是数据库结果集对象,后面自然拿不到数据。

正确写法:直接调用mysqli_query,传入数据库连接和正确的SQL语句(注意database是你的数据库名,这里要写实际的数据表名,比如假设表叫your_table):

$sql = "SELECT * FROM your_table"; // 替换成你真实的表名
$ergebnis = mysqli_query($dblink, $sql);

2. While循环的逻辑完全错了

你这里用了单引号把mysqli_fetch_object包起来,还误用了赋值运算符=,导致$row被赋值成了一段字符串,而不是数据库返回的行对象:

while($row='mysqli_fetch_object($ergebnis)')

这样循环会一直执行,而且$row永远是字符串,不是对象,所以访问$row->var1就会报错。

正确写法:直接调用mysqli_fetch_object,用赋值表达式的结果来判断循环(当没有更多数据时,函数会返回false,循环自动终止):

while($row = mysqli_fetch_object($ergebnis))

3. 其他小问题也要注意

  • 连接数据库时,可以直接把数据库名作为第四个参数传入,不用单独调用mysqli_select_db,更简洁:
    $dblink = mysqli_connect('IP','username','password','database');
    
  • 一定要加查询失败的判断,避免后续代码在查询出错时继续执行:
    if (!$ergebnis) {
        die("查询失败: " . mysqli_error($dblink));
    }
    
  • 循环里的闭合标签写错了,应该是</tr>而不是<tr>,不然HTML结构会乱。

完整修正后的代码

<!DOCTYPE html>
<html>
<head>
    <title>Table with PHP</title>
</head>
<body>
<?php
// 连接数据库时直接指定数据库名
$dblink = mysqli_connect('IP','username','password','database');
if (mysqli_connect_errno()) {
    echo "Error: Failed to connect to MySQL: " . mysqli_connect_error();
    exit; // 连接失败就停止后续代码
}

// 替换成你实际的数据表名,建议只查询需要的字段,效率更高
$sql = "SELECT var1, var2, var3 FROM your_table";
$ergebnis = mysqli_query($dblink, $sql);

// 检查查询是否成功
if (!$ergebnis) {
    die("查询执行失败: " . mysqli_error($dblink));
}
?>
<table width="1000" cellpadding="0" cellspacing="0" border="0">
    <tr>
        <th>var1</th>
        <th>var2</th>
        <th>var3</th>
    </tr>
<?php
// 正确循环获取每一行数据
while($row = mysqli_fetch_object($ergebnis)){
    echo '<tr>';
    echo '<td>' . htmlspecialchars($row->var1) . '</td>'; // 加htmlspecialchars防止XSS
    echo '<td>' . htmlspecialchars($row->var2) . '</td>';
    echo '<td>' . htmlspecialchars($row->var3) . '</td>';
    echo '</tr>';
}
// 释放结果集资源
mysqli_free_result($ergebnis);
// 关闭数据库连接
mysqli_close($dblink);
?>
</table>
</body>
</html>

另外我还加了htmlspecialchars来转义输出的内容,避免可能的XSS攻击,这是个好习惯哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:03:39