我不确定这是否与其他问题重复,但我有一个小的PHP
文件,可以调用一些SQL
INSERT
和DELETE
来查找图片标记系统。大多数情况下插入和删除都有效,但在某些情况下插入不起作用。
有没有办法查看SQL
语句无法执行的原因,类似于在SQL
或Python
中使用Java
函数时的情况,以及失败的情况,它告诉你原因(例如:重复键插入,未终止引用等...)?
答案 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_errno
,mysql_error
,pg_last_error
等等的内容......应该可以执行相同操作。 DebuggerOfChoice::Log
当然可以是您想要使用的任何日志功能