我不确定这是否与另一个问题重复,但我有一个小文件,PHP
它调用了一些图像标记系统。大多数情况下,插入和删除都有效,但在某些情况下,插入不起作用。SQL
INSERT
DELETE
有没有办法查看SQL
语句执行失败的原因,类似于在or中使用SQL
函数时的情况,如果失败,它会告诉你原因(例如:重复键插入、未终止的引号等)?Python
Java
我不确定这是否与另一个问题重复,但我有一个小文件,PHP
它调用了一些图像标记系统。大多数情况下,插入和删除都有效,但在某些情况下,插入不起作用。SQL
INSERT
DELETE
有没有办法查看SQL
语句执行失败的原因,类似于在or中使用SQL
函数时的情况,如果失败,它会告诉你原因(例如:重复键插入、未终止的引号等)?Python
Java
我能想到两件事,还有一件事是我从 amitchhajer 那里偷来的:
pg_last_error会告诉你会话中的最后一个错误。出于显而易见的原因,这太棒了,您将希望将错误记录到磁盘上的文本文件中,以防问题类似于数据库出现故障。如果您尝试将错误存储在数据库中,您可能会在找出原因的过程中遇到一些 HILARIOUS* hi-jinks。
将每个查询记录到此文本文件,即使是成功的查询。找出问题是否影响相同的操作(再次是您的数据库或连接的问题)或每次的某些查询(您的应用程序的问题。)
如果您有权访问您的服务器(或者您的共享主机很好),请启用并检查数据库的查询日志。但是,如果应用程序和服务器之间存在网络问题,这将无济于事。
但如果我不得不猜测,我会想象当应用程序失败时,它会得到奇怪的输入。十分之九的输入没有正确转义,或者 - 因为您使用的是 PHP,它在类型转换期间作为例行程序谋杀变量 - 它被设置为 FALSE 或 NULL 或其他东西,并且系统正在生成一个损坏的查询喜欢INSERT INTO wizards (hats, cloaks, spell_count) VALUES ('Wizard Hat', 'Robes', );
*实际上并不搞笑
通过启动日志开始监视您的 SQL 查询。在那里您可以查看所有查询被触发的内容和错误(如果有)。
本教程启动记录器将有所帮助。
根据您的 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
当然可以是您想使用的任何日志功能