【发布时间】:2017-07-26 17:34:49
【问题描述】:
几天前我发现了 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());
}
【问题讨论】:
-
MyISAM 不是事务性的。你的表需要是 InnoDB
标签: php mysql pdo transactions