0
我知道为了防止注入攻击,PDO :: prepare首先将查询发送到服务器,然后参数稍后;现在,我觉得这引入了另一个问题:这意味着在PDO :: execute之后不能回滚,或者我错过了某些东西?使用准备好的语句后的PDO ::回滚
我在应用程序中有两个表1和2。这两张表不应该包含同一行。当我使用INSERT INTO table1 SELECT FROM TABLE2时,如果INSERT查询成功,我想DELETE FROM table2。如果其中任何一个查询失败,我想回滚。所以我有以下代码:
$dbConn->beginTransaction();
$stmt1 = $dbConn->prepare("INSERT INTO table1 (field1, field2, field3 )
SELECT field1, field2, field3 FROM table2 WHERE field4 = :field4");
$stmt1->execute(array($field4));
$stmt2 = $dbConn->prepare("DELETE FROM table2 WHERE field4 = :field4");
$stmt2->execute(array($field4));
if ($stmt1->rowCount() > 0 && $stmt2->rowCount() > 0)
{
$dbConn->commit();
return true;
}
else
{
$dbConn->rollBack();
return false;
}
没有准备好的声明,这很容易;但有了它,看起来很难;有没有人做过这样的事情?
谢谢。
为什么你认为准备会有所作为?事务处理表格数据。 – Barmar 2015-02-11 20:06:51
有什么困难? – 2015-02-11 20:08:18