読み込みを許可している間だけテーブルの行をロックしようとしていますが、次のコードは行をロックしていません。私はPOSTリクエストを通してcode1をコミットせずに "code1"と "code2"を実行しました。したがって、これらのコードはそれぞれ異なる.phpファイルにあります。PDOでSQL行をロックする方法
「SELECT ... FOR UPDATE」でも試しましたが、これもうまくいきませんでした。
CODE1:
try{
$pdo->beginTransaction();
$sql = "SELECT assertedFlags FROM statementcontent WHERE id = $statementId LOCK IN SHARE MODE;";
$statement = $pdo->query($sql);
var_dump($statement->fetchAll());
}catch(Exception $e){
$pdo->rollBack();
exit('Exception ' . $e->getMessage());
}
コード2:
try{
$pdo->beginTransaction();
$sql = "SELECT assertedFlags FROM statementcontent WHERE id = $statementId LOCK IN SHARE MODE;";
$statement = $pdo->query($sql);
var_dump($statement->fetchAll());
//New segment starts here:
$sql = "UPDATE statementcontent SET assertedFlags = '4' WHERE id = $statementId;";
$statement = $pdo->exec($sql);
var_dump($statement);
$pdo->commit();
}catch(Exception $e){
$pdo->rollBack();
exit('Exception ' . $e->getMessage());
}
それはCODE1は、ロックが解除されます出た後、それが原因でロックされていないということだろうか?
EDIT
私は2つのPDOインスタンスとロックが働いていたこの時点で一つのファイルに両方を置きます。私は、多くのリクエストをしたときにサーバがどのようにクエリを管理するかを実際には理解していません。多くのプロセスやスレッドが多数ありますか?すべてのケースでロックされているか、多くのスレッドでのみロックされていますか?おかげさまで あなたが見なければならないロックの適切な行のために
もちろん、コード1の終了後にロックが解放されるため、ロックされません –