SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 26.05.2009, 14:40:39
Kentai Kentai ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 32
Beiträge: 27
MySQL "exceeded the 'max_updates' resource"

Hallo Liebe Communety,
Habe diese Frage noch nirgends sonst gestellt.

Ich habe ein kleines Onlinegame geschrieben.
In diesem Onlinegame (Browserbasiert) Können die Spieler ihre Charakter Trainieren, Missionen annehmen und neue Techniken Lernen.

Um das alles zu verwalten habe ich ein 'Cooldown'-script verfasst, dass durch einen 5minütigen Cronjob die Dauer der aktiven Aktion verringer und bei einer 0 Dauer auf 'keine setzt'.

Ist als Aktion 'Mission' eingetragen, gibt es ein zusätliches Tabellenfeld welches den Namen der Mission spezifiziert.
Je nach Mission gibt es eine unterschiedliche menge an erfahrung und ryu (die Spielwährung).

Ist Technik eingetragen, gibt es ein zusätzliches Tabellenfeld welches den Namen der Technik spezifiziert, die Gelernt werden soll.

Das Problem ist Folgendes:

Zu beginn lief das Script ausgezeichnet, doch nun habe ich folgende Fehlermeldung Und ich bin mir nicht sicher nach welcher Erweiterung es dazu kam:

User 'mctbm_3435831' has exceeded the 'max_updates' resource (current value: 60000)

Hier das Script:

PHP-Code:
<?php
error_reporting
(E_ALL E_STRICT);
ini_set('display_errors'TRUE);
$db_server '***';
$Benutzer '***';
$Datenbank 'nn_legends';
$db_passwort '***';

date_default_timezone_set('Europe/Brussels');

$db mysql_connect($db_server$Benutzer$db_passwort);
mysql_select_db($Datenbank) or die(mysql_error());
$ID '1';
$unendlich '1';
while (
$unendlich '1')
{
  
$sql "SELECT Benutzername, Aktion1, Dauer1, Aktion2, Dauer2, Aktion3, Dauer3, Mission, Technik FROM status WHERE (ID='$ID')";
    
$result mysql_query($sql) or die(mysql_error());          
    
$data mysql_fetch_array ($result) or die(mysql_error());
    
$Name $data['Benutzername'];
    if (isset (
$data['Benutzername'])) 
    {    
    }
    ELSE
    {
    break;
    }
    
    
$Rangsql "SELECT Rang FROM charaktersettings WHERE Benutzername='$Name'";
    
$Rangcheck = @ mysql_query($Rangsql);  
    
$Rang mysql_result($Rangcheck,0,"Rang");
     
IF (
$data['Aktion1'] == 'keine')
  {
  }
 Else
 {
   IF (
$data['Dauer1'] != 0)
      {
      
$update1 "UPDATE status SET Dauer1=Dauer1-5 WHERE ID=$ID";
      
$go mysql_query($update1) or die(mysql_error());  
      }
      Else
      {
        IF (
$data['Aktion1'] == 'Trainieren')
        {
        
$changeerfahrung "UPDATE werte SET Erfahrungspunkte=Erfahrungspunkte+50 WHERE Benutzername='$Name'";
        
$aktivieren1 mysql_query($changeerfahrung) or die(mysql_error());  
        }
        IF (
$data['Aktion1'] == 'Lernen')
        {
        
$changewissen "UPDATE werte SET Lernpunkte=Lernpunkte+100 WHERE Benutzername='$Name'";
        
$aktivieren2 mysql_query($changewissen) or die(mysql_error());
        
        
$changerank "UPDATE werte SET Rangpunkte$Rang=Rangpunkte$Rang+1 WHERE Benutzername='$Name'";
        
$aktivieren3 = @ mysql_query($sql6);  
        }
        
        IF (
$data['Aktion1'] == 'Trainingslager Erfahrung')
        {
        
$changebeide "UPDATE werte SET Erfahrungspunkte=Erfahrungspunkte+1000, Lernpunkte=Lernpunkte+500 WHERE Benutzername='$Name'";
        
$aktivieren1 mysql_query($changebeide) or die(mysql_error());  
        }
        
        IF (
$data['Aktion1'] == 'Trainingslager Lernen')
        {
        
$changebeide "UPDATE werte SET Erfahrungspunkte=Erfahrungspunkte+500, Lernpunkte=Lernpunkte+1800 WHERE Benutzername='$Name'";
        
$aktivieren1 mysql_query($changebeide) or die(mysql_error());  
        }
        
        IF (
$data['Aktion1'] == 'Trainingslager Ausgeglichen')
        {
        
$changebeide "UPDATE werte SET Erfahrungspunkte=Erfahrungspunkte+700, Lernpunkte=Lernpunkte+700 WHERE Benutzername='$Name'";
        
$aktivieren1 mysql_query($changebeide) or die(mysql_error());  
        }
        
        IF (
$data['Aktion1'] == 'Technik')
        {
        
$sql "SELECT Technik FROM status WHERE Benutzername='$Name'";
        
$query = @ mysql_query($sql);  
        
$Techname mysql_result($query,0,"Technik");
        
$sql2 "SELECT ID, Rang, Erfahrungspunkte, Lernpunkte, RPGPunkte FROM Jutzu WHERE Jutzuname='$Techname'";
        
$query2 = @ mysql_query($sql2);  

        
$ID mysql_result($query2,0,"ID");
        
$Rang mysql_result($query2,0,"Rang");
        
        
$changetechnik "UPDATE Jutzubekannt SET Rang='$Rang', Ranglernen='' WHERE (Benutzername='$Name' AND ID='$ID' AND Ranglernen='$Rang')";
        
$aktivieren1 mysql_query($changetechnik) or die(mysql_error());

        }
        
        IF (
$data['Aktion1'] == 'Mission')
        {
            IF (
$data['Mission'] == 'Wache')
            {
            
$Changeerfahrung rand(60,300);
            
$Changeryu '2600';
            
$randomevent rand(1,10);
            
            
$randrank rand(1,5);
            
            
$changerank "UPDATE werte SET Rangpunkte$Rang=Rangpunkte$Rang+$randrank WHERE Benutzername='$Name'";
            
$aktivieren3 = @ mysql_query($sql6);
            
            }
            IF (
$data['Mission'] == 'Betreuen')
            {
            
$Changeerfahrung rand(40,175);
            
$Changeryu '1100';
            
$randomevent rand(1,10);
            
            
$randrank rand(1,6);
            
            
$changerank "UPDATE werte SET Rangpunkte$Rang=Rangpunkte$Rang+$randrank WHERE Benutzername='$Name'";
            
$aktivieren3 = @ mysql_query($sql6);
            
            }
            IF (
$data['Mission'] == 'Reinigen')
            {
            
$Changeerfahrung rand(10,30);
            
$Changeryu '4500';
            
$randomevent rand(1,10);
            
            
$randrank rand(1,2);
            
            
$changerank "UPDATE werte SET Rangpunkte$Rang=Rangpunkte$Rang+$randrank WHERE Benutzername='$Name'";
            
$aktivieren3 = @ mysql_query($sql6);
            
            }
            IF (
$data['Mission'] == 'Sammeln')
            {
            
$Changeerfahrung rand(30,225);
            
$Changeryu '3200';
            
$randomevent rand(1,10);
            
            
$randrank rand(1,4);
            
            
$changerank "UPDATE werte SET Rangpunkte$Rang=Rangpunkte$Rang+$randrank WHERE Benutzername='$Name'";
            
$aktivieren3 = @ mysql_query($sql6);
            
            }
            IF (
$data['Mission'] == 'Erkunden')
            {
            
$Changeerfahrung rand(80,500);
            
$Changeryu '2000';
            
$randomevent rand(1,10);
                IF (
$randomevent == 10)
                {
                
$IDcheck1 '1';
                
$i '0';
                while (
$IDcheck1 == 1)
                {
                
$i++;
                
$get "SELECT ID FROM post Where (ID='$i')";
                
$IDCheck = @ mysql_query ($get);
                
$IDcheck1 = @ mysql_num_rows($IDCheck);
                }
                
                
$sql "INSERT INTO post (Empfaenger, ID, Sender, Betreff, Nachricht, Zeit) VALUES ('$data[Benutzername]', '$i', 'System', 'Ereignis auf der Mission', 'Auf deiner Mission hast du etwas fundamental wichtiges herausgefunden, du wurdest von der Dorfleitung mit 5000 ryu entlohnt!', NOW())";
                
$query = @ mysql_query($sql) or die(mysql_error());
                
$ErfahrungUndRyu "UPDATE werte SET Ryu=Ryu+5000 WHERE Benutzername='$Name'";
                
$Gain mysql_query($ErfahrungUndRyu) or die(mysql_error());
                }
            
$randrank rand(1,6);
            
$changerank "UPDATE werte SET Rangpunkte$Rang=Rangpunkte$Rang+$randrank WHERE Benutzername='$Name'";
            
$aktivieren3 = @ mysql_query($sql6);
           
            }
            
        
$ErfahrungUndRyu "UPDATE werte SET Erfahrungspunkte=Erfahrungspunkte+$Changeerfahrung, Ryu=Ryu+$Changeryu WHERE Benutzername='$Name'";
        
$Gain mysql_query($ErfahrungUndRyu) or die(mysql_error());  
        }
        
      
$update2 "UPDATE status SET Aktion1='keine', Mission='keine' WHERE (ID='$ID')";
      
$go mysql_query($update2) or die(mysql_error());
      }
   }
IF (
$data['Aktion2'] == 'keine')
   {}
Else
   {
        IF (
$data['Dauer2'] == AND $data['Dauer1'] == 0)
        {
          IF (
$data['Aktion2'] == 'Trainieren')
          {
          
$changeerfahrung "UPDATE werte SET Erfahrungspunkte=Erfahrungspunkte+50 WHERE Benutzername='$Name'";
          
$aktivieren1 mysql_query($changeerfahrung) or die(mysql_error()); 
          
          
$randrank rand(1,5);
            
          
$changerank "UPDATE werte SET Rangpunkte$Rang=Rangpunkte$Rang+$randrank WHERE Benutzername='$Name'";
          
$aktivieren3 = @ mysql_query($sql6);
             
          }
          ElseIF (
$data['Aktion2'] == 'Lernen')
          {
          
$changewissen "UPDATE werte SET Lernpunkte=Lernpunkte+100 WHERE Benutzername='$Name'";
          
$aktivieren2 mysql_query($changewissen) or die(mysql_error());
          
          
$randrank rand(1,5);
            
          
$changerank "UPDATE werte SET Rangpunkte$Rang=Rangpunkte$Rang+$randrank WHERE Benutzername='$Name'";
          
$aktivieren3 = @ mysql_query($sql6);
            
          }
        
$update4 "UPDATE status SET Aktion2='keine' WHERE (ID='$ID')";
        
$go = @ mysql_query($update4) or die(mysql_error()); 
        }
        Elseif (
$data['Dauer2'] != AND $data['Dauer1'] == 0)
        {
        
$update3 "UPDATE status SET Dauer2=Dauer2-5 WHERE ID=$ID";
        
$go mysql_query($update3) or die(mysql_error());
        }
        Else
        {}      
       }

Geändert von Kentai (26.05.2009 um 19:48:07 Uhr)
Mit Zitat antworten
  #2  
Alt 26.05.2009, 14:41:30
Kentai Kentai ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 32
Beiträge: 27
AW: MySQL "exceeded the 'max_updates' resource"

PHP-Code:
IF ($data['Aktion3'] == 'keine')
       {}
Else
    {
        IF (
$data['Dauer3'] == AND $data['Dauer2'] == AND $data['Dauer1'] == 0)
        {
          IF (
$data['Aktion3'] == 'Trainieren')
          {
          
$changeerfahrung "UPDATE werte SET Erfahrungspunkte=Erfahrungspunkte+50 WHERE Benutzername='$Name'";
          
$aktivieren1 mysql_query($changeerfahrung) or die(mysql_error());
          
          
$randrank rand(1,5);
            
          
$changerank "UPDATE werte SET Rangpunkte$Rang=Rangpunkte$Rang+$randrank WHERE Benutzername='$Name'";
          
$aktivieren3 = @ mysql_query($sql6);
          
          }
          IF (
$data['Aktion3'] == 'Lernen')
          {
          
$changewissen "UPDATE werte SET Lernpunkte=Lernpunkte+100 WHERE Benutzername='$Name'";
          
$aktivieren2 mysql_query($changewissen) or die(mysql_error());
          
          
$randrank rand(1,5);
            
          
$changerank "UPDATE werte SET Rangpunkte$Rang=Rangpunkte$Rang+$randrank WHERE Benutzername='$Name'";
          
$aktivieren3 = @ mysql_query($sql6);
            
          }
        } 
        
        ELSE
        {
        
$update5 "UPDATE status SET Dauer3=Dauer3-5 WHERE ID=$ID";
        
$go mysql_query($update5) or die(mysql_error());  
        }
       }      
$ID++;
}

?> 
Hier der Rest des scripts. War zu lang für einen Post.

Geändert von Kentai (26.05.2009 um 19:48:26 Uhr)
Mit Zitat antworten
  #3  
Alt 26.05.2009, 17:28:14
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: MySQL "exceeded the 'max_updates' resource"

da du ja ein profi bist, kennst du das mysql handbuch und hast nachgeschlagen, was diese fehlermeldung bedeutet. ohne nachzuschlagen schätze ich, dass du bei einem provider bist, der verbietet, eine bestimmte anzahl an update-statements pro zeitlimit zu überschreiten. ich kann das aber nur erraten, da du uns ja kaum informationen lieferst, so wie es eigentlich in den forumsverhaltensregeln beschrieben wird. auch verstehe ich nicht, wieso bei einem problem mit mysql nicht im bereich für mysql gepostet wird.

Geändert von feuervogel (26.05.2009 um 17:28:37 Uhr)
Mit Zitat antworten
  #4  
Alt 26.05.2009, 17:58:04
Kentai Kentai ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 32
Beiträge: 27
AW: MySQL "exceeded the 'max_updates' resource"

Mein Problem ist hier, dass ich zwar bisher die möglichkeit hatte meine Probleme durch Nachschlagen zu lösen, aber über diese Fehlermeldung keine Infos bekomme.

Normalerweise habe ich einen zusätzlichen Apacheserver auf dem Ich teste, weil dort Fehlermeldungen komplett angezeigt werden, aber hier wird mir einfach gesagt, dass eine 60 Sekunden Zeitüberschreitung vorliegt.

Ich habe auch im Mysqlhandbuch nichts darüber gefunden, aber vielleicht ist es nur meine Suchweise^^
Aus andere Foreneinträgen habe ich entnommen, dass es möglicherweise am Provider liegt, aber dann wundert es micht, dass es bei meinem Apache auch nicht funktioniert...

Was das Forum angeht.

Nun, ich nehme an, dass das Problem mehr in MYsql liegt als in Php, aber ich vermute, dass es mit der Whileschleife zusammen hängt, da ich sämtliche verwendete Querys einzeln fehlerfrei ausführen konnte.

Falls ich mich Irre, bitte verschieben^^

mfg,
Kentai
Mit Zitat antworten
  #5  
Alt 26.05.2009, 18:58:35
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: MySQL "exceeded the 'max_updates' resource"

die ganzen statements stehen uach noch in einer while-schleife drin? OMG. ich glaube, du solltest erstmal gründlichst dein datenbank-design überarbeiten und schauen, dass du die anzahl deiner statements radikal minimierst...

zu deiner suchweise:

Zitat:
The server limits account resources based on the resource-related columns of the user table in the mysql database: max_questions, max_updates, max_connections, and max_user_connections.
http://dev.mysql.com/doc/refman/5.0/...resources.html

es liegt also wohl an der einstellung des mysql-servers der da genutzt wird.
Mit Zitat antworten
  #6  
Alt 26.05.2009, 19:07:50
Kentai Kentai ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 32
Beiträge: 27
AW: MySQL "exceeded the 'max_updates' resource"

Ah gut, das hilft mir schon um einiges weiter.

Sehe ich es also richtig, dass mein script zuviele 'UPDATE' Querys aufeinmal ausführt und vom Server geblockt wird?

Falls ja:

Was wäre, wenn ich mein script in mehrere kleinere scripts aufspalte und über IF-Konditionen umleite wenn bestimmte aktionen gewöhlt wurden?

Auf diese Weise limitiere ich die Anzahl der gleichzeitigen Anfragen.

EDIT:

Ich habe nun das script modifiziert und einen Teil in ein anderes script ausgelagert.
Allerdings bleibt das Problem bestehen.

Hat niemand vielleicht eine Idee, was ich noch versuchen könnte?

Ich habe die gepostete Version des scipts auf den neusten Stand gebracht.

EDIT2:

Ich beginne langsam zu verstehen: Das Problem ist, scheinbar, tatsächlich, dass pro Stunde nur eine gewisse anzahl an sqlquerys ausgeführt werden darf.

Allerdings stimmen hier einige Dinge nicht so ganz:
1. Das script läuft alle 5 Minuten an und wurde im Laufe eines Tages jedes mal geblockt, obwohl das Limit laut provider jede Stunde resetten sollte
2. Auf meinem eigenen Apacheserver, den ich zu testzwecken laufen lasse, führt er das script ebenfalls nicht aus und begründet dies mit folgender Fehlermeldung:

Fatal error: Maximum execution time of 60 seconds exceeded in C:\xampp\htdocs\_private\Aktionscooldown.php on line XXXX

Ich habe bewusst keine Zeilenangabe gemacht, da diese sich bei jedem aufruf ändert.

Ich bin mir einfach nicht sicher, was hier falsch läuft.
Ich konnte bis jetzt jedes php / sql Problem selbst beheben, mithilfe von etwas Nachforschung und gedult hat es gewöhnlich geklappt, aber hier schaffe ich es einfach nicht das Problem richtig zu erkennen und weiß nicht, wie ich es lsen soll.

es wäre wirklich toll, wenn mir hier irgendjemand helfen könnte.

Falls ihr mehr Informationen zu meinem Problem benötigt, sagt mir bitte welche und ich werde sie schreiben.

mfg, Kentai

Geändert von Kentai (26.05.2009 um 20:12:33 Uhr)
Mit Zitat antworten
  #7  
Alt 26.05.2009, 20:11:40
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: MySQL "exceeded the 'max_updates' resource"

wenn ich das richtig verstehe, dann ist das eine begrenzung PRO ZEIT und nicht PRO GLEICHZEITIG. wenn du also maximal 1000 update-statements / minute ausführen darfst, ist es schnurz, ob die in verschiedenen oder in einem script statt finden.

wie schon gesagt: überarbeite dein datenbankdesign und vereinfache es stark. die komplexität aus dingen herauszunehmen löst meistens die vorhandenen probleme von selbst.
Mit Zitat antworten
  #8  
Alt 26.05.2009, 20:41:30
Kentai Kentai ist offline
Anfänger
 
Registriert seit: Feb 2009
Alter: 32
Beiträge: 27
AW: MySQL "exceeded the 'max_updates' resource"

FINALEDIT:

So, nach vielen Stunden harten suchens habe ich endlich das Problem erkannt:
es war tatsächlich ein Php problem^^ denn ich habe die $ID Variable 2 mal verwendet und sie mitten im script auf 1 zurückgesetzt, während ich sie weiter oben aber als Zählvariable verwendet habe.

Also:
Unendlich durchläufe = unendlich querys.

Ich bin froh, dass ich es doch noch gefunden habe....
schade das nicht doch noch mal jemand zwischendurch drüber geschaut hat, aber ok es ist auch ein langes script.

danke jedenfalls fürs durchlesen,

mfg
Kentai

Geändert von Kentai (26.05.2009 um 23:55:09 Uhr)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MySQL 4 "große" Abfragen coder90 MySQLi/PDO/(MySQL) 0 06.09.2008 14:45:08
Mysql startet nicht oberonal MySQLi/PDO/(MySQL) 3 24.11.2006 10:41:31
MySQL Page Script. Problem. dtone MySQLi/PDO/(MySQL) 8 15.10.2006 15:58:06
mySQL DB erstellen und unter PHP nutzen norial MySQLi/PDO/(MySQL) 1 25.10.2004 12:01:29
MySQL - ORDER BY RAND() und PHP MacMarc PHP Grundlagen 15 05.12.2002 23:23:39


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:59:23 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt