我想在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 很陌生,所以谁能告诉我这是否可以运行?谢谢!
示例 (PDO( 使用"?">
<?php
/* Execute a prepared statement by passing an array of values */
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
$sth->execute(array(175, 'yellow'));
$yellow = $sth->fetchAll();
?>
看看这个例子,你可以看到你的错误。
第一:
$sql = "SELECT * FROM table1 WHERE table1.id = ?";
第二:
$stmt = $pdo->prepare($sql);
for($id=1;$id<3;$id++){
$stmt->execute($id);
$result=$stmt->fetchAll();
}
对不起我的英语,但这不是我的母语。