网站无法向MySQL数据库插入数据,请求排查PHP代码问题
无法将表单数据插入MySQL数据库的问题排查与修复
核心问题分析
- 表单字段与PHP接收不匹配:HTML中textarea的name是
aptComment,但PHP里错误地使用$_POST['aptText']获取值;同时PHP尝试获取$_POST['aptStat'],但表单中无对应字段,导致两个变量未定义,直接破坏SQL语法。 - SQL语法错误:字符串类型的字段值未用单引号包裹,MySQL会将其识别为列名而非字符串,触发语法错误。
- 未校验数据库连接:未确认
mysqli_connect是否成功,若连接失败(如密码错误、数据库不存在),后续操作直接失效。 - 无错误调试信息:仅返回成功/失败状态,无法获取具体错误原因,难以定位问题。
修正后的代码
PHP代码(book.inc.php)
<?php session_start(); // 连接数据库并校验连接状态 $con = mysqli_connect("localhost","root","","yellowstudios"); if (!$con) { die("数据库连接失败: " . mysqli_connect_error()); } if(isset($_POST['submit'])) { // 匹配HTML表单字段名,给不存在的字段设置默认值 $name = $_POST['UserName']; $contact = $_POST['UserContact']; $email = $_POST['UserEmail']; $date = $_POST['aptDateTime']; $artist = $_POST['artistName']; $text = $_POST['aptComment']; // 修正为表单中实际的name值 $stat = 'pending'; // 可根据需求设置默认状态,或在HTML中添加隐藏字段传递 // 使用预处理语句,避免SQL注入与语法错误 $query = "INSERT INTO UserRecord (UserName, UserContact, UserEmail, aptDateTime, artistName, aptText, aptStat) VALUES (?, ?, ?, ?, ?, ?, ?)"; $stmt = mysqli_prepare($con, $query); mysqli_stmt_bind_param($stmt, "sssssss", $name, $contact, $email, $date, $artist, $text, $stat); $query_run = mysqli_stmt_execute($stmt); if($query_run) { $_SESSION['status'] = "预约提交成功!"; header("Location: book.output.php"); exit; // 跳转后终止代码执行 } else { // 返回具体错误信息用于调试 $_SESSION['status'] = "预约提交失败!错误信息: " . mysqli_error($con); header("Location: book.output.php"); exit; } mysqli_stmt_close($stmt); } mysqli_close($con); ?>
可选:HTML表单添加状态字段
若需自定义aptStat的值,可在表单中添加隐藏输入:
<input type="hidden" name="aptStat" value="pending">
内容的提问来源于stack exchange,提问作者trish
相关产品推荐
相关产品推荐

