如何调试调用SQL语句的AJAX(PHP)代码?

时间:2012-08-21 06:03:20

标签: php sql ajax postgresql

我不确定这是否与其他问题重复,但我有一个小的PHP文件,可以调用一些SQL INSERTDELETE来查找图片标记系统。大多数情况下插入和删除都有效,但在某些情况下插入不起作用。

有没有办法查看SQL语句无法执行的原因,类似于在SQLPython中使用Java函数时的情况,以及失败的情况,它告诉你原因(例如:重复键插入,未终止引用等...)?

3 个答案:

答案 0 :(得分:3)

我有两件事可以想到我的头脑,还有一件事我从amitchhajer偷走

  • pg_last_error会告诉您会话中的最后一个错误。出于显而易见的原因,这很棒,并且您将要将错误记录到磁盘上的文本文件中,以防问题类似于DB发生故障。如果您尝试将错误存储在数据库中,那么在找出原因的过程中可能会有一些HILARIOUS * hi-jink。

  • 将每个查询记录到此文本文件中,即使是成功的文本文件也是如此。查看问题是否会影响相同的操作(数据库或连接的问题)或每次都会发生某些查询(问题与您的应用有关。)

  • 如果您有权访问服务器的内容(或者您的共享托管是好的),请启用并检查database's query log。但是,如果应用程序和服务器之间存在网络问题,这将无济于事。

但是,如果我不得不猜测,我会想象当应用程序失败时,它会得到奇怪的输入。十分之九的输入没有得到正确的转义或者 - 因为你正在使用PHP,它在类型转换过程中将变量作为例行程序谋杀 - 它被设置为FALSE或NULL或者某种东西而系统正在生成一个破坏的像INSERT INTO wizards (hats, cloaks, spell_count) VALUES ('Wizard Hat', 'Robes', );

这样的查询

*实际上并不热闹

答案 1 :(得分:2)

通过启动日志开始监控SQL查询。在那里,您可以查看所有查询被触发的内容以及错误(如果有)。

This tutorial启动记录器会有所帮助。

答案 2 :(得分:0)

根据您的PHP文件使用的API(让我们希望它是PDO;),您可以使用s.th检查当前事务中的错误。像

$naughtyPdoStatement->execute();
if ($naughtyPdoStatement->errorCode() != '00000')
    DebuggerOfChoice::log( implode (' ', $naughtyPdoStatement->errorInfo() );

使用旧版API时,有类似mysql_errnomysql_errorpg_last_error等等的内容......应该可以执行相同操作。 DebuggerOfChoice::Log当然可以是您想要使用的任何日志功能