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

Docker化学生成绩检查器:文本框输入处理及PHP数据库报错问题

问题分析与解决方案

错误根源

call to a member function real_escape_string() on Boolean 的核心原因是:你调用该方法的数据库连接变量实际是false——你认为连接成功,但实际连接实例无效,大概率是Docker环境下的数据库地址配置错误,或是连接校验逻辑不严谨。

步骤1:修正数据库连接校验

Docker中SQL容器的主机名不是localhost,而是容器名称(比如mysql-container)或容器内部IP。先改用严格校验的连接代码:

// 替换为你的容器实际配置
$dbHost = 'mysql-container'; // 不要用localhost
$dbUser = 'your_db_user';
$dbPass = 'your_db_password';
$dbName = 'score_checker_db';

$conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);

// 严格校验连接状态
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

如果此处报错,先解决连接参数问题,再处理输入数据。

步骤2:安全处理输入文本

确认连接有效后,再处理textarea的输入。优先用预处理语句替代real_escape_string,更安全且能避免对象调用错误:

// 获取前端提交的文本(注意:textarea的name属性必须是input-text,id仅作前端标识)
$inputText = $_POST['input-text'] ?? '';

// 用预处理语句插入数据
$stmt = $conn->prepare("INSERT INTO student_records (input_content) VALUES (?)");
// "s"表示字符串类型,绑定输入变量
$stmt->bind_param("s", $inputText);
$stmt->execute();

// 关闭资源
$stmt->close();
$conn->close();

若坚持使用real_escape_string,必须先确认连接对象有效:

if (is_object($conn) && !$conn->connect_error) {
    $escapedText = $conn->real_escape_string($inputText);
} else {
    die("数据库连接无效,无法处理输入");
}

前端注意事项

  • 确保textarea的name属性设为input-text,表单提交或AJAX请求是通过name传递值,而非id。
  • 需在getTotal微服务调用完成后,再触发数据提交(比如用JS监听微服务回调,完成后发起POST请求到PHP接口)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:09:10