Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: похоже ошибка в коде в статье  (Прочитано 5666 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AndreyKl
Гость
« : 02-09-2007 07:35 » 

доброго времени суток. Нашёл статью о хранении сессий в БД у вас на сайте https://club.shelek.ru/viewart.php?id=267, спасибо автору. Но, похоже в код вкарлась ошибка.



if (!mysql_query("UPDATE sessions SET atime=NOW() WHERE sid='$sid'"))
      die(mysql_error()); // Стоит проверить права на UPDATE

   if (!mysql_affected_rows()) // строки нет - надо создать
   {
       if (!mysql_query(
      "INSERT INTO sessions (sid) VALUES ('$sid')"
      ))
      die(mysql_error()); // Может, вставка запрещена?

       return ""; // Т.к. данных нет, то возвращаю пустую строку
   }


когда приходит больше двух запросов и они попадают практически одновременно, скрипт умирает. Потому что mysql_affected_rows - ноль, и оба скрипта кидаются делать INSERT один успевает, другой умирает... я использовал такую конструкцию:


mysql_query( "INSERT INTO sessions (sid) VALUES ('$sid') ON DUPLICATE KEY UPDATE atime=NOW()" ) or die(mysql_error());


может быть есть смысл исправить, ошибка неочевидна, по моему скромному мнению.
Спасибо.

Андрей.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 02-09-2007 14:10 » new

AndreyKl, спасибо за отзыв.

Твой вариант не совсем подходит, т.к. ориентация статьи была на типичный для хостинга MySQL 3.23 и 4.0.
У меня другое предложение: тупо сделать вставку, а потом апдейтить что есть.

Код: (PHP)
        mysql_query("INSERT INTO sessions (sid) VALUES ('$sid')");

        if (!mysql_query("UPDATE sessions SET atime=NOW() WHERE sid='$sid'"))
                die(mysql_error()); // Стоит проверить права на UPDATE

Так пойдет?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines