从PHP PDO执行MySQL提交时是否同步?

从PHP PDO执行MySQL提交时是否同步?,php,mysql,pdo,commit,Php,Mysql,Pdo,Commit,使用MySQL的PHP PDO接口,假设我有以下代码来结束事务(假设事务已正确启动): 当函数返回时,是否已刷新对日志的写入?也就是说,事务是否已提交,或者我是否只是请求提交?假设我没有设置任何延迟刷新的选项,例如,将innodb_flush_log_at_trx_commit设置为零 我这样问是因为,如果我遵循上述代码: echo 'Transaction has been committed.'; 我不想被谎言抓住 更新:见下面的评论。我不是问InnoDB是如何工作的。我询问PDO接口是否

使用MySQL的PHP PDO接口,假设我有以下代码来结束事务(假设事务已正确启动):

当函数返回时,是否已刷新对日志的写入?也就是说,事务是否已提交,或者我是否只是请求提交?假设我没有设置任何延迟刷新的选项,例如,将innodb_flush_log_at_trx_commit设置为零

我这样问是因为,如果我遵循上述代码:

echo 'Transaction has been committed.';
我不想被谎言抓住

更新:见下面的评论。我不是问InnoDB是如何工作的。我询问PDO接口是否在返回之前等待InnoDB引擎执行该命令


更新#2:我应该说提交将通过调用PDO::commit来执行,这就是我实际执行的方式,以防这与使用SQL执行有任何区别。

出于好奇,用户怎么知道你在撒谎?他们需要在打印消息后直接访问数据库并查询数据库,但在提交之前(假设有延迟,我怀疑有延迟)。这很像在mysql监视器命令行中发出
commit
。如果返回提示,则表示提交已完成。但是,这并不意味着后台可能没有磁盘活动。用户怎么知道我在撒谎?用户可能会看到该消息,然后在一段时间后发现,由于电源故障,事务丢失。我不想将消息的措辞改为“交易可能已提交;请祈祷。”以下是有关InnoDB工作方式的更多信息,摘自手册:“如果在提交时innodb_flush_log_的值为0,则日志缓冲区将每秒写入日志文件一次,并对日志文件执行刷新到磁盘操作,但在事务提交时不会执行任何操作。当值为1(默认值)时,每次事务提交时,日志缓冲区都会写入日志文件,并对日志文件执行刷新到磁盘操作。当值为2时,…“Marc B:我认为您没有描述默认行为。请参阅上面手册中我的引用。但是,如果您知道如何拼写您的名字,您将获得+10分。;-)
echo 'Transaction has been committed.';