IPB 2.1.x, mySQL 5: исправляем проблемы совместимости

Исправляем ошибки, допущенные в запросах компанией IPS. Разработчики не учли некоторые мелочи, из-за которых у многих пользователей возникают различные ошибки при использовании MySQL пятой версии. Для исправления запросов проделайте следующие изменения в файлах, описанных ниже.

ips_kernel/class_db_mysql.php

Найти:

        $get   = implode( ","     , $select_array   );
        $table = implode( ","     , $final_from     );
        $where = implode( " AND " , $where_array    );
        $join  = implode( "\n"    , $joinleft_array );

добавляем ниже

    <code php>  if ( count($final_from) > 1 )
          $table = "(".$table.")";</code>

Tеперь редактируем файлы-хранилища запросов IPB.

sources/sql/mysql_queries.php ищем:

    function msg_get_cc_users( $a )
    {
    
        return "SELECT m.mgroup_others, m.id, m.name, m.members_disable_pm, m.members_display_name, m.msg_total, m.view_pop, m.email_pm, m.language, m.email, me.vdirs, g.g_max_messages, g.g_use_pm FROM ".SQL_PREFIX."members m, ".SQL_PREFIX."groups g
                LEFT JOIN ".SQL_PREFIX."member_extra me ON (m.id=me.id)
               WHERE LOWER(m.members_display_name) IN (".implode(",",$a['name_array']).")
               AND m.mgroup=g.g_id";
    }

меняем на:

    function msg_get_cc_users( $a )
    {
    
        return "SELECT m.mgroup_others, m.id, m.name, m.members_disable_pm, m.members_display_name, m.msg_total, m.view_pop, m.email_pm, m.language, m.email, me.vdirs, g.g_max_messages, g.g_use_pm FROM (".SQL_PREFIX."members m, ".SQL_PREFIX."groups g)
                LEFT JOIN ".SQL_PREFIX."member_extra me ON (m.id=me.id)
               WHERE LOWER(m.members_display_name) IN (".implode(",",$a['name_array']).")
               AND m.mgroup=g.g_id";
    }

ищем:

 <code php> function portal_get_poll_join( $a )
  {
      return "SELECT t.tid, t.title, t.state, t.last_vote, p.*, v.member_id as member_voted
              FROM ".SQL_PREFIX."topics t, ".SQL_PREFIX."polls p
              LEFT JOIN ".SQL_PREFIX."voters v ON (v.member_id={$a['mid']} and v.tid=t.tid)
              WHERE t.tid={$a['tid']} AND p.tid=t.tid";
  }</code>

меняем на:

    function portal_get_poll_join( $a )
    {
        return "SELECT t.tid, t.title, t.state, t.last_vote, p.*, v.member_id as member_voted
                FROM (".SQL_PREFIX."topics t, ".SQL_PREFIX."polls p)
                LEFT JOIN ".SQL_PREFIX."voters v ON (v.member_id={$a['mid']} and v.tid=t.tid)
                WHERE t.tid={$a['tid']} AND p.tid=t.tid";
    }

ищем:

   function contact_member_report_get_mods( $a )
    {
        return "SELECT m.id, m.members_display_name as name, m.members_disable_pm, m.email, m.mgroup, moderator.member_id, moderator.group_id
                FROM ".SQL_PREFIX."moderators moderator, ".SQL_PREFIX."members m
                WHERE moderator.forum_id={$a['fid']}
                AND (moderator.member_id=m.id OR moderator.group_id=m.mgroup)";
    }

меняем на:

    function contact_member_report_get_mods( $a )
    {
        return "SELECT m.id, m.members_display_name as name, m.members_disable_pm, m.email, m.mgroup, moderator.member_id, moderator.group_id
                FROM (".SQL_PREFIX."moderators moderator, ".SQL_PREFIX."members m)
                WHERE moderator.forum_id={$a['fid']}
                AND (moderator.member_id=m.id OR moderator.group_id=m.mgroup)";
    }

ищем:

  function contact_member_report_get_cpaccess( $a )
    {
        return "SELECT m.id, m.members_display_name as name, m.email, m.members_disable_pm FROM ".SQL_PREFIX."members m, ".SQL_PREFIX."groups g WHERE g.g_access_cp=1 AND m.mgroup=g.g_id";
    }

меняем на:

 function contact_member_report_get_cpaccess( $a )
    {
        return "SELECT m.id, m.members_display_name as name, m.email, m.members_disable_pm FROM (".SQL_PREFIX."members m, ".SQL_PREFIX."groups g) WHERE g.g_access_cp=1 AND m.mgroup=g.g_id";
    }

ищем:

   function contact_member_report_get_supmod( $a )
    {
        return "SELECT m.id, m.members_display_name as name, m.email, m.members_disable_pm FROM ".SQL_PREFIX."members m, ".SQL_PREFIX."groups g WHERE g.g_is_supmod=1 AND m.mgroup=g.g_id";
    }

меняем на:

    function contact_member_report_get_supmod( $a )
   {
        return "SELECT m.id, m.members_display_name as name, m.email, m.members_disable_pm FROM (".SQL_PREFIX."members m, ".SQL_PREFIX."groups g) WHERE g.g_is_supmod=1 AND m.mgroup=g.g_id";
    }
 

tips/mysql5.txt · Последние изменения: 2007/09/19 18:55 root

Работает на DokuWiki
© 2002—2006 ibresource
e-mail: wikiteam@iblink.ru