4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
 Откуда: Москва Всего сообщений: 3031 Рейтинг пользователя: 75 Дата регистрации на форуме: 29 сен. 2001
|
Профиль | ИгнорироватьNEW! Сообщение отправлено: 6 мая 2006 17:38
При переходе с 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); }
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
|