我想在事务内锁定表。像这样的东西:
DB::transaction(function (){
DB::statement('LOCK TABLES important_table WRITE');
//....
});
但是,该行DB::statement('LOCK TABLES important_table WRITE');
始终会触发以下错误:
SQLSTATE [HY000]:常规错误:2014当其他未缓冲的查询处于活动状态时,无法执行查询。考虑使用PDOStatement :: fetchAll()。另外,如果你的代码只针对mysql运行,则可以通过设置PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性来启用查询缓冲。(SQL:LOCK TABLES officeSeal WRITE)
如何锁定Laravel中的桌子?
可以这样在Laravel中锁定表:
DB::raw('LOCK TABLES important_table WRITE')
;
对于尝试此答案但失败的任何人,请尝试以下操作:
DB::unprepared('LOCK TABLES important_table WRITE');
stackoverflow.com/questions/25346162/…
@尤川豪您正在使用哪个Laravel版本?似乎应该从2013年开始修复github.com/laravel/framework/issues/53
我只想提醒其他人,
DB::raw
这只会生成字符串。它不会直接执行sql语句。