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

无法向MySQL数据库插入评论,连接正常无报错请求技术排查

解决MySQL评论无法插入的问题

我帮你排查了代码里的几个核心问题,这应该就是评论提交后消失且不入库的原因:

1. 表单Action的逻辑错误

你在表单的action属性里直接调用了setComments($conn),这会导致页面加载时就执行这个函数,而不是用户点击提交按钮后才触发。正确的做法是把表单提交到当前页面,然后在页面顶部判断是否触发了提交动作,再调用处理函数。

2. 数据库选择的语法错误

在dba.inc.php里,你用了mysqli_select_db($conn,'$dbname'),单引号包裹的变量不会被PHP解析,相当于你在尝试连接名为$dbname的数据库而不是实际的123456789_db。而且你在实例化mysqli时已经传入了数据库名,完全不需要重复调用mysqli_select_db。

3. 日期格式的拼写错误

你写的date('Y-m-d H:i:m')最后一个m是「月份」,正确的秒数标识应该是s,也就是date('Y-m-d H:i:s'),否则存入的时间会有格式问题,可能导致插入失败。


修正后的完整代码

主页面代码

<?php 
date_default_timezone_set('UTC'); 
// 开启错误提示,方便调试(上线后可以关闭)
error_reporting(E_ALL);
ini_set('display_errors', 1);

include '../conn/dba.inc.php'; 
include '../function/comments.inc.php';

// 仅在表单提交时执行评论插入逻辑
if (isset($_POST['commentSubmit'])) {
    setComments($conn);
    // 可选:提交后刷新页面,避免重复提交
    // header("Location: ".$_SERVER['PHP_SELF']);
    // exit();
}
?> 
<!doctype HTML> 
<html> 
<head> 
<meta charset="UTF-8"> 
<Title>Test</Title> 
<link rel="stylesheet" type="text/css" href="/CSS/default.css"> 
</head> 
<body onLoad="document.forms.Mfrm.message.focus()"> 
<?php 
echo "<form method='POST' action='' name='Mfrm'> 
<input type='hidden' name='uid' value='Anonymous'> 
<input type='hidden' name='date' value='".date('Y-m-d H:i:s')."'> 
<input type='text' class='inptcss' name='message' placeholder='Placeholder'/> 
<button type='submit' name='commentSubmit'>Comment</button> 
</form><br>"; 
?> 
</body> 
</html>

comments.inc.php

<?php 
function setComments($conn) {
    // 先检查必要参数是否存在,避免报错
    if (!isset($_POST['uid'], $_POST['date'], $_POST['message'])) {
        return;
    }
    
    $uid = $_POST['uid'];
    $date = $_POST['date'];
    $message = $_POST['message'];
    
    // 使用预处理语句防止SQL注入,同时避免语法错误
    $sql = "INSERT INTO comments (uid, date, message) VALUES (?, ?, ?)";
    $stmt = $conn->prepare($sql);
    // 绑定参数:"sss"表示三个字符串类型的参数
    $stmt->bind_param("sss", $uid, $date, $message);
    $stmt->execute();
    $stmt->close();
} 
?>

dba.inc.php

<?php 
$servername = "localhost";
$username = "123456789_username";
$password = "dbpassword";
$dbname = "123456789_db";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 确认数据库连接成功
echo 'Database is Selected';
?>

额外建议

  • 上线前记得关闭错误提示(去掉error_reporting和ini_set那两行),避免泄露服务器敏感信息。
  • 可以在评论插入成功后添加页面跳转或弹窗提示,让用户明确知道提交状态。
  • 永远不要直接把用户输入拼接到SQL语句里,预处理语句是防止SQL注入的标准且安全的做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:21:20