你可以原谅我,但据我所知,PDO beginTransaction用于测试所有必需的查询,如果所有返回成功,它们都被执行......我是对的吗? 如果是的话,我想问你是否可以在多个查询中使用它,但是不同的类...
我在同一页面上有一个通知类和一个类跟随者。
class Notifications{
private $pdo;
public $now;
public function __construct(){
$now=time();
$db = Database::getInstance();
$this->pdo = $db->getConnection();
}
////////////INSERT NOTIFICATIONS/////////////////////
public function InsertNoti($toid, $title, $description, $link){
$sql = "blah blah";
$result = $this->pdo->prepare($sql);
$result->execute(array(':toid'=>$toid));
}
}
并遵循相同的......我想要的是beginTransaction->如果成功,请执行Follow - >插入通知..是否可以使用beginTransaction或者我必须使用if(successNotification){然后执行follow}?
答案 0 :(得分:0)
没有。 PDO :: beginTransaction()启动一个事务。事务中的每个SQL语句通常都是执行,未经过测试。如果它们都没有失败,则所有这些都会同时提交或回滚。提交和回滚都可能导致错误,您需要陷阱和处理。
开始事务后,PDO对象将等待您发出PDO :: commit()或PDO :: rollback()。尽管您希望在尽可能短的时间内保持交易开放,但在开始和结束交易之间做什么并不重要。您只需要小心不要做任何导致隐式提交的事情。例如,在MySQL中,事务中的任何DDL都将提交事务。
你并不清楚你正在尝试做什么,但其中一个似乎很可能。 (伪代码,为简单起见省略了错误处理。)
begin transaction
insert notification
commit
if no errors, then
begin transaction
insert follow
commit
或
begin transaction
insert notification
insert follow
commit
您应该仔细阅读PDO docs about transactions。