gpt4 book ai didi

mysql - Phalcon PDO 事务无法正常工作

转载 作者:行者123 更新时间:2023-11-29 11:27:36 24 4
gpt4 key购买 nike

我花了将近一整天的时间才解决交易问题,但失败了。我的要求是在一个事务中在表 topic 和表 topic_data 中插入一条新记录。我的代码是这样的:

// database connection
$di->set( 'db', function() use( $conf ) {
return new \Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter( [
'host' => $conf->db->host,
'username' => $conf->db->username,
'password' => $conf->db->password,
'dbname' => $conf->db->dbname,
'options' => [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_PERSISTENT => true,
\PDO::ATTR_AUTOCOMMIT => false
]
] );
} );

// transaction code
public function create( $params ) {
$this->db->begin();

$id = \Idalloc::next();
$topic = new Topic();
$topic->id = $id;
$topic->ctime = $_SERVER[ 'REQUEST_TIME' ];

$tags = $params[ 'tags' ];

$params[ 'tags' ] = implode( ',', $tags );
$topic->assign( $params );

if( $topic->save() === false ) {
$this->db->rollback();
return false;
}

for( $i = 0, $l = count( $tags ); $i < $l; ++$i ) {
$topicTag = new TopicTag();
$topicTag->tag_id = $tags[ $i ];
$topicTag->topic_id = $id;
$topicTag->type = $params[ 'type' ];
if( $topicTag->save() === false ) {
$this->db->rollback();
return false;
}
}

var_dump( $this->db->isUnderTransaction() );

$this->db->commit();
return $id;
}

失败并显示:

  • 如果我不设置 \PDO::ATTR_PERSISTENT => true,则方法“create”返回 $id 和 var_dump( $this->db->isUn​​derTransaction () ) 为 TRUE,但没有数据插入到表 topic 和表 topic_tag

  • 如果我设置 \PDO::ATTR_PERSISTENT => true,我将收到异常:
    [2016 年 6 月 21 日星期二 02:16:21 +0800][错误] PDOException:没有事件事务
    仍然无法向表topic中插入数据,但表topic_tag中出现了新记录。

  • 如果我只保留这两部分中的一个,它就会工作得很好。

如何解决此问题?是否有一种简单的方法来创建手动事务?

最佳答案

我找到了这个问题的答案。 DI 中设置的“db”必须共享。所以需要另一个参数“TRUE”:

// database connection
$di->set( 'db', function() use( $conf ) {
return new \Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter( [
'host' => $conf->db->host,
'username' => $conf->db->username,
'password' => $conf->db->password,
'dbname' => $conf->db->dbname,
'options' => [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_PERSISTENT => true,
\PDO::ATTR_AUTOCOMMIT => false
]
] );
}, true );

关于mysql - Phalcon PDO 事务无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37929499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com