MySQL/PHP连接错误,可能是用户制作

ego*_*119 3 php mysql

我负责维护一个学习管理系统,这是我在过去几个月里一直处理的问题.

一名学生(数千人)声称他的论文提交被网站"吃掉".表格提交后,他说他的论文已被以下文字取代:

警告:mysql_connect()[function.mysql-connect]:在'读取初始通信包'时失去与MySQL服务器的连接,系统错误:第84行/home/web/solomon_1.3/classes/db.class.php中的111

致命错误:连接到数据库服务器时出错:在第85行的/home/web/solomon_1.3/classes/db.class.php中

前面的警告和致命错误作为他的提交存储在数据库中.但这怎么可能因为错误明确表明无法建立联系?论文提交页面基本上是基本的:单个数据库连接,表单数据保存到数据库,用户被重定向回提交页面.

db.class.php的第84-86行是:

if (!($sql_id=mysql_connect($server, $user, $pwd,$new))){
    trigger_error("[Error connecting to database server]: {$sql_id}", E_USER_ERROR);
}
Run Code Online (Sandbox Code Playgroud)

请注意学生报告的错误如何在Fatal Error描述字符串周围缺少方括号,如PHP源文件中所示.大约两个月前,在学生的第一个错误报告之后添加了这些方括号,怀疑他只是将错误字符串粘贴到提交框中以避免工作.我想这是21世纪版本的"狗吃我的作业".

就在一周前,学生仍然在没有括号的情况下报告原始错误.服务器范围的grep验证了学生保持"获取"的错误是基于一个根本不存在的字符串.

现在,最合理的解释是学生正在与我们联系.数据库连接错误发生在过去,但至少在过去三个月内没有发生.

学生有可能被驱逐出去,所以我想确保我的证据是可靠的.你能否想到任何可能的替代理论?

Gre*_*reg 5

当这样的错误发生时,你不记得吗?
看起来他确实在弥补......

正如Jeff在Exception-Driven Development中所说的那样

如果您正在等待用户告诉您有关您的网站或应用程序的问题,那么您只能看到实际发生的所有问题中的一小部分.众所周知的冰山一角.


小智 5

由于某种原因,学生可以设置括号被剥离的设置,或者他们只是在看到新的错误时发送前一个错误的c + p.或者他们可以输入它.永远不要相信用户报告的错误消息8).

我想我首先要说的是你不应该向用户发送错误消息.他们应该被记录下来.关闭display_errorsphp.ini,并打开log_errors.这既是一个安全问题(我现在知道你的服务器的文件结构,你正在运行MySQL),并且可以让你跟踪错误发生的时间.

您还应该有Web服务器访问日志,是吗?如果您知道学生来自的IP,那应该让您知道访问的时间以及何时查找错误.

此外,您可能会考虑让应用程序进行日志记录,尤其是与用户登录相关的日志记录.如果在您trigger_error将当前用户和环境附加到文件之前,您将立即知道该用户是否确实看到了这些问题.