我有一个使用PDO Transactions的PHP脚本。
$PDO->beginTransaction();
$sth = $PDO->prepare("INSERT INTO tbl_last_packing_upload (folderID, subfolderID) VALUES (1, 1)");
$sth->execute();
由于某种原因,这在本地(INSERT
运行)有效,但是当我将其推送到远程服务器时无效。
为了使我INSERT
可以远程工作,我需要将其放在$PDO->beginTransaction();
生产线上。以下内容可远程工作:
$sth = $PDO->prepare("INSERT INTO tbl_last_packing_upload (folderID, subfolderID) VALUES (1, 1)");
$sth->execute();
$PDO->beginTransaction();
将INSERT
远程服务器放置在远程服务器中后,为什么不能在远程服务器上启动beginTransaction
?我在使用事务的同一台远程服务器上有许多其他PHP脚本,它们都可以正常工作。
有任何想法吗?
除非存在现有的$PDO->beginTransaction()
未清事务(以前已调用但未提交),否则所发布的代码应该没有问题。如果存在未结事务,则PDO在尝试启动新事务时将引发异常。
您已经具有PDO设置以引发异常,而不是通过静默方式出错
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
如果将事务和INSERT
语句代码包装在一个try/catch
块中,则需要调试并检查在该catch
块中捕获的错误。
捕获的错误catch (PDOException $e) {...}
不会单独进入PHP的内置错误报告机制,因此您需要强制将其打印到可以读取的位置。在生产Web服务器上,您不想将其打印到屏幕上,因此我建议使用PHP的error_log()
功能将其写入Web服务器的错误日志中。对默认日志位置的简单写入仅需要将消息作为参数。
try {
// everything posted above
} catch (PDOException $e) {
// Caught an error, write it to the log
error_log("Error at line " . __LINE__ . " in " . __FILE__ . ": " . $e->getMessage());
// Whatever else you already do to handle the error...
// etc...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句