gpt4 book ai didi

php - MySQL事务: queries committed anyway

转载 作者:行者123 更新时间:2023-11-29 19:16:57 24 4
gpt4 key购买 nike

几天前我发现了 PDO 和交易,它们非常棒。今天我写了第一笔交易,但它并没有按预期结束。为了测试它,我在两个查询之一中放置了一个错误的不存在的表,并且无论哪一个查询,另一个(正确的)查询都会被提交。

我在一些网站上阅读了语法结构,它似乎是正确的,但也许错误就在那里。这些表是 InnoDB。或者更好的是,phpMyAdmin 在数据库概览表中报告最后一个摘要行的 MyISAM,但每个表行的“type”列报告 InnoDB >;我认为这可能是因为 MyISAM 是服务器上的默认类型,对吗?

代码如下:

$conn = new PDO($db->getDsn(), $db->getUsername(), $db->getPassword());

try {
$conn->beginTransaction();
$stmt = $conn->prepare('INSERT INTO trips (country_code, year, img, showX) VALUES (:country_code, :year, :img, :showX)');
$stmt->execute(array(':country_code' => strtolower($country_code), ':year' => $year, ':img' => $rename_response, ':showX' => $show_hide));
$tripID = $conn->lastInsertId();

$stmt = $conn->prepare('INSERT INTO trips_multilang (tripID, lang, country_name) VALUES (:tripID, :lang, :country_name)');
$stmt->execute(array(':tripID' => $tripID, ':lang' => $trip_lang, ':country_name' => strtolower($country_name)));

$conn->commit();
} catch (PDOException $e) {
$conn->rollBack();
die($e->getMessage());
}

最佳答案

向 $db 类添加另一个返回数组的方法 $db->getOptions()

return [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];

然后将 PDO 调用为

$conn = new PDO($db->getDsn(), $db->getUsername(), $db->getPassword(), $db->getoptions());

之后您的代码将开始跟上。
现在,您毫无意义地捕获异常,因为实际上没有抛出任何异常。

顺便说一句,您必须捕获 Exception,而不是 PDOException,并且还必须捕获 you must re-throw an exception in case of error而不是消亡。

关于php - MySQL事务: queries committed anyway,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42632565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com