Seite 1 von 1

Anpassung für Bugfix "Tabelle automatisch leeren"

Verfasst: 10.11.2008 01:09
von Maestro
Moin,

leider ist mir meine Session-Tabelle vollgelaufen obwohl ich den Bugfix Tabelle automatisch leeren eingebaut hatte. Wie ich nun rausgefunden habe unterstützt mein neuer Provider die SQL_LAYER Abfrage nicht, somit kann das Script auch nicht ausgeführt werden. Ich habe das Script nun so umgeschrieben das es ohne die Abfrage auskommt und da wollte ich vor dem Einbau Fragen ob das so korrekt umgeschrieben ist. Übrigens läuft MySQL5. Hier nun das Script:

Code: Alles auswählen

$error = TRUE;

$sql_error = $db->sql_error($result);
if ($sql_error["code"] == 1114)
{
    $result = $db->sql_query('SHOW TABLE STATUS LIKE "'.SESSIONS_TABLE.'"');
    $row = $db->sql_fetchrow($result);
    if ($row["Type"] == "HEAP" || $row["Engine"] == "MEMORY")
    {
        if ($row["Rows"] > 2500)
        {
            $db->sql_query("DELETE QUICK FROM ".SESSIONS_TABLE." ORDER BY session_time ASC LIMIT 50");
        }
        else
        {
            $db->sql_query("ALTER TABLE ".SESSIONS_TABLE." MAX_ROWS=".($row["Rows"]+50));
        }

        if ($db->sql_query($sql))
        {
            $error = FALSE;
        }
    }
}
if ($error)
{
    message_die(CRITICAL_ERROR, "Error creating new session", "", __LINE__, __FILE__, $sql);
}
Zum Vergleich nochmal die Version mit dem SQL_LAYER:

Code: Alles auswählen

$error = TRUE;
if (SQL_LAYER == "mysql" || SQL_LAYER == "mysql4")
{
    $sql_error = $db->sql_error($result);
    if ($sql_error["code"] == 1114)
    {
        $result = $db->sql_query('SHOW TABLE STATUS LIKE "'.SESSIONS_TABLE.'"');
        $row = $db->sql_fetchrow($result);
        if ($row["Type"] == "HEAP" || $row["Engine"] == "MEMORY")
        {
            if ($row["Rows"] > 2500)
            {
                $delete_order = (SQL_LAYER=="mysql4") ? " ORDER BY session_time ASC" : "";
                $db->sql_query("DELETE QUICK FROM ".SESSIONS_TABLE."$delete_order LIMIT 50");
            }
            else
            {
                $db->sql_query("ALTER TABLE ".SESSIONS_TABLE." MAX_ROWS=".($row["Rows"]+50));
            }
            if ($db->sql_query($sql))
            {
                $error = FALSE;
            }
        }
    }
}
if ($error)
{
    message_die(CRITICAL_ERROR, "Error creating new session", "", __LINE__, __FILE__, $sql);
}
Ich hoffe ihr könnt die Frage beantworten.

MfG

Maestro

Verfasst: 11.11.2008 20:55
von Maestro
Habe die Sessionlänge mal auf 24h gestellt um zu schauen ob das umgeschriebene Script funktioniert. Leider nein, bin jetzt also ziemlich ratlos wo das Problem liegen könnte.

MfG

Maestro