можно содержимое подписывать с использование IP пользователя, fingerprint, salt. Соответственно не спасет если вор находится под тем же айпи и использует точно такой же браузер.
Виталий Гусев, можно. НО! НУЖНО, НЕОБХОДИМО, ОБЯЗАТЕЛЬНО использовать подготовленные выражения.. Просто забудьте о существовании id = ".$_GET['userid'].". Нет такого больше
Сергей c0re, запрос where id in (1, 2, 5, 10) без order by может вернуть 1,2,5,10. может вернуть 2,5,1,10. может вернуть 10,5,2,1 - ибо постгрес будет возвращать записи в том порядке в котором нашел. А искать он будет сначала в кеше, потом на диске. В одну секунду он в кеше увидел 1,2 во вторую 5,10. С диском тоже не все гладко - потому что mvcc и всякие оптимизации ни хрена не гарантируют порядок. Да и вообще понятие порядок отсутствует. Следовательно первый апдейт выборкой where in получил что сначала он ему надо изменить запись с id 1, потом с id 5, он лочит запись с id 1, правит, и пытается получить лок на запись c id 5. Второй запрос update получил сначала запись с id 5, лочит правит и пытается получить лок на запись с id 1. Deadlock.
В случае с select order by мы гарантируем что все апдейты у нас получат один порядок. Запрос 1 получает 1,2,5,10. Лочит запись с id 1, правит, лочит c id 2, правит....... Второй запрос получает 1,2,5,10 - пытается получить лок на запись с id 1 - видит что залочена - ждет. Deadlock нет. В статье даже картинка есть
Сергей c0re, статью прочитайте абзац Упреждающая блокировка FOR UPDATE. Проблема с деадлоками здесь возникает здесь потому что строки для update постгрес будет выдавать в неопределенном порядке. и по этому может возникнуть ситуация когда первый запрос схватил 1 строку, и пытается получить вторую, а второй параллельный запрос схватит 2, и будет ждать 1 строку. по этому когда мы гвоздям упорядочиваем строки для апдейта - такой ситуации не будет. собственно и без lock update должно работать
З.Ы. Нахрена я ссылку на статью то привел?
З.З.Ы у меня сильное подозрение что использование ctid здесь перестраховка. Не говоря о том что я отвечал на вопрос с деадлоками - а уже потом искал статью с объяснениями почему оно так. Но судя по всему зря искал :)
Максим Тимофеев, тем что будет видно что вообще лежит в сессиях. внезапно при русском е в слове logged_user при записи и всех английских e при чтении нихера не будет работать, и хер поймешь что не работает.
/**
* Get the validated data from the request.
*
* @return array
*/
public function validated()
{
return array_merge($this->validator->validated(), ["a" => 1]);
}