PHP页面同时实现MySQL数据加载与删除功能报错求助
语法错误分析与修复
你遇到的syntax error, unexpected 'delete' (T_STRING)是因为echo语句中嵌套的双引号没有正确转义。外层的echo字符串用双引号包裹,而你在<a>标签的href属性里又用了双引号,这会让PHP误以为字符串在这里提前结束,后面的delete就变成了无意义的语法片段,从而抛出错误。
两种快速修复方式
方法1:转义href属性内的双引号
在href的双引号前添加反斜杠\,告诉PHP这是字符串的一部分,不是结束符号:
echo "<h1> " . $row["rTitle"]. " </h1>" . $row["rText"]. "<br> <a href=\"delete.php?id={$row['id']}\">Delete</a>";
方法2:改用单引号包裹href属性值
HTML允许用单引号包裹属性值,这样就不会和外层的双引号冲突:
echo "<h1> " . $row["rTitle"]. " </h1>" . $row["rText"]. "<br> <a href='delete.php?id={$row['id']}'>Delete</a>";
额外的潜在问题修复
除了语法错误,你的代码还有几个需要注意的问题,避免后续踩坑:
- 混用数据库扩展:你同时用了
mysqli($conn->query())和已废弃的mysql_query(),后者不再被PHP支持,统一用mysqli即可。 - 参数不匹配:链接里传的是
id参数,但删除逻辑里取的是$_GET['rID'],参数名不一致,永远无法正确触发删除。 - SQL注入风险:直接把
$_GET参数拼到SQL语句里非常危险,建议用转义或预处理语句。 - 逻辑混乱:删除逻辑和展示逻辑混在一起,页面每次加载都会尝试执行删除,应该把删除逻辑单独放到
delete.php,或者先判断是否有删除请求再执行。
整理后的完整修正代码:
<?php include 'conn.php'; // 查询并展示评论 $sql = "SELECT * FROM Reviews LIMIT 3"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "<h1>{$row['rTitle']}</h1>{$row['rText']}<br><a href='delete.php?id={$row['id']}'>Delete</a><hr>"; } } else { echo "0 results"; } // 建议把这段删除逻辑单独放到delete.php,这里仅做示例 if(isset($_GET['id'])) { // 先转义参数避免注入,更安全的方式是用预处理语句 $id = $conn->real_escape_string($_GET['id']); $deleteSql = "DELETE FROM Reviews WHERE id = {$id}"; if($conn->query($deleteSql)) { echo "<p>记录已成功删除</p>"; } else { echo "<p>删除失败:" . $conn->error . "</p>"; } } $conn->close(); ?>
内容的提问来源于stack exchange,提问作者user10208257
相关产品推荐
相关产品推荐

