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
相关产品推荐
相关产品推荐

