Образ базы данных, затем обновление = ошибка, обновление, затем изображение = успех! Зачем?

Итак, я столкнулся с запутанной (вызванной программистом) ошибкой, поскольку я программист.

Я создал сайт с профилем пользователя. Профиль пользователя имеет множество полей и изображение. Изображение загружается нормально. Сначала он преобразуется, чтобы вписаться в определенную область.

...
//Я загружаю изображение в базу данных.
imageConverter->loadImage($_FILE... blah balh).
...

Когда пользователь решает чтобы изменить свою информацию, у него также есть шанс изменить свою фотографию. Процесс редактирования профиля ТОЧНО ТАК ЖЕ, КАК процесс НАЧАЛА ПРОФИЛЯ. Единственная разница в том, что я проверяю поля, которые он/она обновлял по одному, и меняю эту конкретную строку в базе данных (очевидно, это можно сделать оптимально, но сначала я хочу, чтобы это работало :))

Запутанная часть заключается в следующем. Когда я РЕДАКТИРУЮ информацию профиля, порядок выглядит следующим образом. я использую MYSQLI ($ this-> mysqli-> запрос ($ запрос)).

они редактируются в базе данных, ЕСЛИ ОНИ ИЗМЕНЯЮТСЯ

  • 1 имя
  • 2 фамилия
  • 3 пароль
  • 4 различных предпочтения (флажки / переключатели).
  • 5 электронная почта
  • 6 фото профиля.
  • 7 обновите информацию о сеансе с запросом к базе данных для получения самой обновленной информации.

Теперь #7 возвращает false (SELECT * FROM USERSINFO)

Теперь, если я поменяю порядок действий.

  • 1 имя
  • 2 фамилия
  • 3 пароль
  • 4 различных предпочтения (флажки / переключатели).
  • 5 электронная почта
  • 6 обновите информацию о сеансе с запросом к базе данных для получения самой обновленной информации.
  • 7 фото профиля.

Он работает просто ОТЛИЧНО.

есть ответы? Означает ли это, что если 1000 человек попытаются использовать мою базу данных одновременно, все это сломается?

Некоторый код:

Вставка изображения (шаг №6 в нерабочем примере, №7 в рабочем примере)
$this->mysqli->query("DELETE FROM ".DB_REVIEW_IMAGE_TABLE." WHERE email='$email'");
if ($this->mysqli->query("ВСТАВИТЬ В ".DB_REVIEW_IMAGE_TABLE." VALUES('$email', '$content', '$imageType')"))

Обновление информации о пользователе в информацию о сеансе. (шаг №7 в плохом примере, №6 в рабочем примере)
$this->userInfo = $_SESSION[SESSION_USER_INFO] = $database->getUserInfo($this->email);

which $ database->getUserInfo($this->email) == "SELECT ".DB_USERS_ALL_MOUNTAIN.", ".DB_USERS_BACK_COUNTRY.", ".DB_USERS_GROOMERS.", ".DB_USERS_PARK.", ".DB_USERS_SEASON_DAYS.", ".DB_USERS_SEX." , ".DB_USERS_YEARS.", ".DB_USERS_FIRST_NAME.", ".DB_USERS_LAST_NAME.", ".DB_USERS_CITY.", ".DB_USERS_STATE." FROM ".DB_USER_INFO_TABLE.SQL_WHERE_EMAIL

Мне нравится использовать константы :). И DB_USERS_SEX = мужчина или женщина (на всякий случай)

Михаил


person ThePrimeagen    schedule 08.11.2010    source источник
comment
Пожалуйста, отформатируйте свой вопрос для лучшей читабельности. Воспользуйтесь кнопками над формой.   -  person bcosca    schedule 08.11.2010
comment
Я предполагаю, что база данных каким-то образом занята при вставке изображения, поэтому, если я сделаю оператор заранее, он будет работать нормально. Так запутанно!   -  person ThePrimeagen    schedule 08.11.2010
comment
Можем ли мы получить реальный код, пожалуйста? Как именно вы обновляете картинку, какие запросы запускаете и т.д.?   -  person deceze♦    schedule 08.11.2010
comment
Хорошо, есть код :!   -  person ThePrimeagen    schedule 08.11.2010
comment
Все еще отсутствует код - фактический PHP-код, генерирующий и выполняющий ваши запросы, был бы полезен. Используете ли вы отдельные операторы UPDATE на каждом шаге или создаете переменный запрос UPDATE по мере продвижения? Для меня важно то, что вы не указываете имена полей в своем INSERT, что означает, что вы полагаетесь на то, что позиции полей будут точными (что может сломаться при изменении вашей схемы - вы пропустите некоторые запросы в своем коде если вы когда-нибудь измените схему, и их будет трудно найти).   -  person gregmac    schedule 08.11.2010


Ответы (1)


Хорошо, ответ был прост.

В моем классе базы данных была переменная модульного уровня с именем $mysqli. Этот $mysqli каким-то образом начал привыкать в то же время.

Я сделал 2 последовательных вызова.

  • обновлениеPic
  • updateSessionInfo

Каждый использовал базу данных. Но наличие модульного уровня var $mysqli каким-то образом вызовет конфликт. Тем более, что информация о сеансе и информация об изображении находятся в двух разных базах данных. Я не должен много знать о php, но они должны выполняться до того, как другой будет завершен. ПОЭТОМУ, чтобы разбить это, каждый метод в базе данных

  • создает соединение с базой данных
  • устанавливает базу данных для использования.
  • выполняет запрос
  • закрывает соединение/результаты.

Теперь это работает!

person ThePrimeagen    schedule 08.11.2010