PDO beginTransaction不让脚本执行

快速通道

我有一个使用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脚本,它们都可以正常工作。

有任何想法吗?

迈克尔·伯考斯基(Michael Berkowski)

除非存在现有的$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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章