编写PHP PDO更新查询时触发500错误,请求技术协助
解决PHP PDO更新查询的500错误问题
你的代码触发500错误的核心原因及修复方案如下:
缺少UPDATE语句必填参数的绑定
你编写的SQL更新语句中,SET部分声明了:title、:body、:category_id三个占位符,但代码仅绑定了:post_id,PDO执行时无法找到这三个参数的值,直接触发致命错误。- 若只是测试查询是否能匹配到目标post,可暂时简化SQL:
$sql = "UPDATE posts SET updated_at = NOW() WHERE post_id = :post_id"; - 若为实际更新操作,需先获取这些字段的值(比如从表单提交),再绑定所有参数:
// 假设从POST表单获取更新数据 $title = $_POST['title']; $body = $_POST['body']; $category_id = $_POST['category_id']; $sql = "UPDATE posts SET title = :title, body = :body, category_id = :category_id WHERE post_id = :post_id"; $query = $db->prepare($sql); // 绑定所有占位符参数 $query->bindParam(':title', $title); $query->bindParam(':body', $body); $query->bindParam(':category_id', $category_id); $query->bindParam(':post_id', $id); $query->execute();
- 若只是测试查询是否能匹配到目标post,可暂时简化SQL:
跳转后未终止代码执行
在if(!is_numeric($id))判断后,执行header('Location: question.php')但未添加exit();,后续代码仍会继续运行,可能引发额外错误。修正后:if(!is_numeric($id)) { header('Location: question.php'); exit(); }开启PDO错误调试
500错误属于服务器端致命错误,开启PDO的错误模式能直接查看具体错误信息,便于排查问题。在数据库连接完成后添加:$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
修正后的完整测试用代码:
<?php if(!isset($_GET['id'])) { header('Location: question.php'); exit(); } else { $id = $_GET['id']; } require_once('./includes/connection.php'); // 开启PDO错误提示 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if(!is_numeric($id)) { header('Location: question.php'); exit(); } // 简化SQL用于测试匹配post_id $sql = "UPDATE posts SET updated_at = NOW() WHERE post_id = :post_id"; $query = $db->prepare($sql); $query->bindParam(':post_id', $id); $query->execute(); ?> <?php include 'header.php';?> <div><?php echo $id ?></div> <?php include 'footer.php';?>
内容的提问来源于stack exchange,提问作者Praise Adeala
相关产品推荐
相关产品推荐

