【发布时间】:2017-08-31 16:59:21
【问题描述】:
我想在 MySQL 中开始一个包含多个查询的事务,通过自学,我编写了如下代码:
$pdo = new PDO('mysql:host=localhost;dbname=project', '', '', array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false
));
$pdo->beginTransaction();
try {
// First Query
$sql = "SELECT * FROM table1 WHERE table1.id = 1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
if ($row = $stmt->fetch()) {
// There should be only one row so I used if
}
else {
}
// Second Query
$sql2 = "SELECT * FROM table2 WHERE table2.id = 1";
$stmt2 = $pdo->prepare($sql2);
$stmt2->execute();
if ($row = $stmt2->fetch()) {
}
else {
}
$pdo->commit();
echo "OK!";
}
catch(Exception $e) {
echo $e->getMessage();
$pdo->rollBack();
}
所以在我的代码中,我两次使用了相同的 $pdo
$stmt = $pdo->prepare($sql);
$stmt2 = $pdo->prepare($sql2);
然后
$pdo->commit();
当它只有一个 stmt 时,代码会很好地显示数据库数据。
我没有成功测试它,因为其他文件中存在语法错误阻止它运行。我对 PDO 很陌生,所以谁能告诉我这是否可以运行?谢谢!
【问题讨论】:
-
the manual 中是否有其他建议?
-
谢谢!我只是粗略地查看了手册,我不这么认为......这个例子似乎大多数时候只使用 1 个查询?
-
这看起来不错。如果你没有得到任何错误并且你不能打破它,我认为你在正确的轨道上。当使用事务时,使用相同的连接是重要的。毕竟,它们不会在不同的连接之间共享。
-
谢谢!我将尝试修复语法错误,看看是否可以执行并回复您:)D
-
@tadman 我已经修复了语法错误,代码运行没有缺陷,数据库中的数据也成功更新了! :D
标签: php mysql pdo transactions prepare