Привет!
Как можно безопасно вставить новую запись в базу данных избежав повторной вставки (при race condition).
Есть такой код:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();
$result = $dbh->exec("INSERT INTO `rating` (`ID`, `count`, `post_id`, `user_id`, `sign_ts`, `date`) SELECT NULL, '4', '1', '1', '".$id."', CURRENT_TIMESTAMP FROM DUAL WHERE NOT EXISTS (SELECT * FROM `rating` WHERE `sign_ts`='".$id."' FOR UPDATE)");
if($result){
echo "Запись вставлена";
echo $dbh->commit();
} else {
$dbh->rollBack();
}
Если есть какие то предложения, буду рад вашему ответу, спасибо.