【发布时间】:2015-01-20 20:35:37
【问题描述】:
我对使用数据库非常陌生。我目前正在使用 Google Cloud SQL 并通过 PHP PDO 访问数据库。
我设法找到了一个包含一些示例代码的网站 (http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers):
<?php
try {
$db->beginTransaction(); //<---- 1
$db->exec("SOME QUERY"); //<---- 2
$stmt = $db->prepare("SOME OTHER QUERY?");
$stmt->execute(array($value));
$stmt = $db->prepare("YET ANOTHER QUERY??");
$stmt->execute(array($value2, $value3));
$db->commit(); //<---- 3
} catch(PDOException $ex) {
//Something went wrong rollback!
$db->rollBack();
echo $ex->getMessage();
}
根据上面的代码,如果我做了'$db->beginTransaction();',会开始锁定表吗?然后 '$db->exec("SOME QUERY");'会正常的。最后,'$db->commit();'会保存上面的所有内容并解锁表格吗?
如果一切正常运行,那么我是否应该假设当第 2 行正在运行时,不能完成对表的其他调用(它们将排队)并且其他调用只能在调用第 3 行后开始?我只是想知道我对这个过程(以及代码是如何编写的)的理解是否准确。
【问题讨论】:
-
是的,事务将停止对 exec 语句中的表进行的任何更改。您可以通过at the mysql docs 获取有关交易的完整详细信息(除此之外还有很多其他内容)。
标签: php mysql pdo transactions