我正在调试遗留PHP应用程序中的问题,其中表中的某个列更新时没有约束将表中的所有行设置为值。这种行为是出乎意料的,所以我花了相当多的时间来追查错误的原因。
背景:
我们尝试了什么:
我的问题:
在不熟悉的应用程序中遇到看似流氓的查询时,您使用哪些技术来查找该查询的来源?
答案 0 :(得分:2)
对于间歇性问题,我建议在PHP代码中进行非常详细的日志记录。这将允许您查看更改发生时发生的情况以及实际运行的查询。如果无法手动重现,没有实际的方法可以在没有某种调试输出/日志记录的情况下对其进行跟踪。
如果,即使在添加额外的日志记录之后,您也无法发现问题,使用测试环境并使用应用程序而不涉及涉及该表的查询。
最后但并非最不重要的是,检查mySQL中的触发器。我不确定mySQL记录了触发器的内容,但是它只是在没有在bin日志中给出详细信息的情况下进行更新是有道理的。
答案 1 :(得分:1)
如果可以使用ORM,我不会这样做,但在注释中包含__FILE__
和__LINE__
常量作为sql的一部分。这样,您就可以从mysql日志中了解代码的文件和行。