Объединенный Открытый Проект - Сайт для Настоящих Компьютерщиков

Объединенный Открытый Проект

Сайт для Настоящих Компьютерщиков

; Логин:
  Пароль:
Обычный
Безопасный
Запомнить пользователя



Зарегистрироваться
Забыли пароль?
 
 
 
Объединенный Открытый Проект »   Базы данных »   Ошибки при переходе с MySQL 4 на MySQL 5
RSS
Реклама: vip фитнес клуб карты на выбор предлагаем.

Ошибки при переходе с MySQL 4 на MySQL 5

Неприятные последствия перехода и способы их решения

Текущий рейтинг темы: Нет

<<Назад  Вперед>>Модератор: wsxПечать
 
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
4X_Pro
Откуда: Москва
Всего сообщений: 3031
Рейтинг пользователя: 75





Дата регистрации на форуме:
29 сен. 2001
При переходе с MySQL 4 на MySQL 5 обнаружил очень неприятный момент: перестали работать некоторые запросы. В частности, запрос вида

$sql="SELECT u.*, lv.*, ln.*, st.*, u__pmcount AS pmcount, u__warnings AS uw_count ".
"FROM ".$GLOBALS['DBprefix']."User u, ".$GLOBALS['DBprefix']."Language ln, ".$GLOBALS['DBprefix']."StyleSet st ".
"LEFT JOIN (".$GLOBALS['DBprefix']."LastVisit lv) ON (lv.uid=u.u_id AND lv.fid=\"$forum\") ".
"WHERE $sqldata AND st.st_id=u.u_stid ";

стал давать ошибку "unknown column u.u_id".
Долго искал причину и выяснил, что в MySQL 5 поменялся приоритет запросов и теперь надо список таблиц после FROM брать в скобки, чтобы все работало нормально, т.е.
$sql="SELECT u.*, lv.*, ln.*, st.*, u__pmcount AS pmcount, u__warnings AS uw_count ".
"FROM (".$GLOBALS['DBprefix']."User u, ".$GLOBALS['DBprefix']."Language ln, ".$GLOBALS['DBprefix']."StyleSet st )".
"LEFT JOIN (".$GLOBALS['DBprefix']."LastVisit lv) ON (lv.uid=u.u_id AND lv.fid=\"$forum\") ".
"WHERE $sqldata AND st.st_id=u.u_stid ";

Лично я решил эту проблему так: перед выполнением все запросы стал обрабатывать вот так:
  if (strpos(strtoupper($query),"SELECT")!==false) {
    $query=preg_replace("/FROM([^\"\']+?)LEFT\s+?JOIN/is","FROM($1)LEFT JOIN",$query);
  }

---
Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
<<Назад  Вперед>>Модератор: wsxПечать
Объединенный Открытый Проект »   Базы данных »   Ошибки при переходе с MySQL 4 на MySQL 5
RSS
Быстрый переход в раздел:
Реклама: Русские скидки . Стоматология - стоматологические клиники. Голливудская улыбка в подарок.
Бамбуковые наматрасники бежевого цвета.
Выключатели Legrand c доставкой: legrand розетки выключатели.


Время выполнения скрипта: 0.6685. Количество выполненных запросов: 17, время выполнения запросов 0.3501
Rambler's Top100