如何在Laravel 3/MySQL中运行'SELECT FOR UPDATE'

Jon*_*han 2 mysql innodb locking laravel laravel-3

我试图使用Laravel 3执行SELECT ... FOR UPDATE查询:

SELECT * from projects where id = 1 FOR UPDATE;
UPDATE projects SET money = money + 10 where id = 1;
Run Code Online (Sandbox Code Playgroud)

我现在已经尝试了好几个小时:

DB::connection()->pdo->exec($query);
Run Code Online (Sandbox Code Playgroud)

和

DB::query($query)
Run Code Online (Sandbox Code Playgroud)

我也尝试添加START TRANSACTION; ... COMMIT;到查询,我试图分开SELECT从UPDATE在这样两个不同的部分:

DB::query($select);
DB::query($update);
Run Code Online (Sandbox Code Playgroud)

有时我会受到0行的影响,有时我会收到类似这样的错误:

SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active.  Consider using PDOStatement::fetchAll().  Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.    
SQL: UPDATE `sessions` SET `last_activity` = ?, `data` = ? WHERE `id` = ?
Run Code Online (Sandbox Code Playgroud)

我想使用Laravel的数据库连接锁定行以更新敏感数据.

谢谢.

mic*_*lik 5

在所有的情况下,你需要做的是增加money的10,你不需要更新之前锁定该行.只需执行更新查询即可完成工作.该SELECT查询只会拖慢你的脚本,在这种情况下,并不能帮助.

UPDATE projects SET money = money + 10 where id = 1;
Run Code Online (Sandbox Code Playgroud)