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
相关产品推荐
相关产品推荐

