PHP PDO exec()和commit()有什么区别

时间:2015-06-03 20:45:32

标签: php mysql pdo

任何人都可以解释PHP PDO库类中PDO :: commit()和PDO :: exec()方法之间的区别。

例如 **假设已建立PDO连接

$pdo = pdo_connection and params

$pdo->beginTransaction();

$sql = "INSERT INTO USERS VALUES ('u1','u2')";

$pdo->exec($sql);

$pdo->commit();

我想知道哪些阶段数据将永久保存在数据库中。和commit和exec之间有什么区别

4 个答案:

答案 0 :(得分:3)

要了解发生了什么,您需要了解数据库交易

来自Wikipedia

  

通常使用类似于以下的模式,使用包含在事务中的SQL之类的语言向数据库系统发出简单事务:

     
      
  1. 开始交易
  2.   
  3. 执行一组数据操作和/或查询
  4.   
  5. 如果没有发生错误,则提交事务并结束它
  6.   
  7. 如果发生错误,则回滚事务并结束它
  8.   

在您的示例代码中,您使用beginTransaction()启动新事务。

然后使用exec()执行一个查询。在这里你可以执行更多的查询。

请注意,在此阶段,您的交易之外的任何内容都无法查看您的查询在交易中所做的任何更改。只有在提交事务之后,其他任何事情才能看到这些更改。

当在事务内部时,还有回滚的能力,这意味着中止自启动事务以来发生在数据上的任何更改。

  

我想知道哪些阶段数据将永久保存在数据库中。

希望从上面可以清楚地看到,只有在commit()通话后,才能永久保存更改。

答案 1 :(得分:1)

commit提交以beginTransaction开头的事务。 exec只执行它作为参数的查询,因此db中的实际更改将在提交后发生。例如,如果beginTransaction和commit之间出现问题,则DB中不会有任何更改。你可以在begin和commit之间有多个exec(),它们将被执行all或none。

答案 2 :(得分:1)

exec()是一种执行任何类型的sql-statement的方法。它适用于选择,创建表,创建索引等。插入和更新数据也有效。

commit()的目的是提交事务。

答案 3 :(得分:0)

当您处理事务时,首先启动事务(beginTransaction),然后发送所有要执行的查询“all or none”(exec,query等),然后关闭事务(commit)。 第一个介绍发现谷歌,许多其他人找到很少搜索: http://www.sqlteam.com/article/introduction-to-transactions