PHP - MySQL Fehlermeldung



  • tagchen...
    irgendwie komme ich hier gerade nicht weiter und hoffe ihr könnt helfen.
    also:
    habe in meinem script folgenden aufruf:

    for ($a=0; $a<7; $a++) {
       $vergleich=date("d.m.Y", mktime(0,0,0,$teile_beginn[1], $teile_beginn[0]+$a,  $teile_beginn[2]));
       $id_abfrage=&$ka->get_list($vergleich);
       // $vergleich -> Datum im deutschen format
       // die variable $vergleich stimmt in jedem durchlauf
    }
    

    die aufrufende function lautet:

    function get_list ($param) {
     //	$param	-->	heutiges Datum deutsch
     $abfrage=mysql_query("SELECT * FROM new_calender");
     while ($row=mysql_fetch_array($abfrage)) {
       // mach irgendwas
     }
    }
    

    Ich bekomme folgende Fehlermeldungen:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
    Mein Problem ist aber, das dieser fehler nicht immer auftritt, sonden am beispiel der for schleife, wenn a unterschiedliche Werte annimmt und bei den anderen durchläufen alles korrekt darstellt...
    laut google liegts am db connect, habe diesen auch schon in die function mit eingebaut etc etc und da bekomme ich, dass angeblich die db nicht da wäre, aber beim nächsten aufruf der funktion auf einmal wieder alles funzt.
    habe auch schon mysql_errno und mysql_error etc eingebunden, aber die sagen es wäre alles ok.
    ich verzweifle langsam hier weil ich echt keinen plan mehr hab was ich tun soll. vielleicht ist es ja auch nur ein trivialer fehler aber irgendwie komm ich da nicht drauf.

    Danke schonmal für eure mühe und hilfe

    THX a lot
    bart(holomeus)



  • Da in der Funktion get_list $param gar nicht verwendet wird, hat es mit der Schleife und dem Wert daraus auch nichts zu tun.

    mach mal

    $abfrage=mysql_query("SELECT * FROM new_calender") or die(mysql_error());
    

    Höchstwahrscheinlich machst du aber da was anderes als du postest (weil es so keinen sinn ergibt).

    $param ist doch sicher da, um die Abfrage einzugrenzen, also z.b. im WHERE.. Teil des Queries benutzt zu werden?

    Wenn ja, dann poste mal das ganze Query inkl. mysql_error() - Meldung.



  • also $param wird verwendet aber nicht zur eingrenzung der sql abfrage sondern zum vergleichen in der while schleife.

    komplette function get_list:

    function get_list ($param) {
      //	$param	-->	heutiges Datum deutsch
      $abfrage=mysql_query("SELECT * FROM new_calender") or die(mysql_error());
      while ($row=mysql_fetch_array($abfrage)) {
        $korrekt_date_all=&$this->get_date_from_mikro ($row["end"]);
        $dat=explode(" ",$korrekt_date_all);
        if ($dat[0]==$param) {
    	$nummern[]=$row["id"];
        }
      }
      return $nummern;
    }
    

    okay zur erklärung:
    in der tabelle new_calender im feld end steht ein timestamp der form: "1180648800"
    nun will ich alle einträge des übergebenen Datums (param) filtern. mir fiel keine dümmere idee ein, als mir alles auszugeben, den timestamp (microtime) in ein "richtiges" Datumsformat umzuwandeln (*get\_date\_from_mikro (row["end"])*) dieses dann mit meiner übergebenen variablen abzugleichen und bei übereinstimmung die entsprechende id in nem array abzulegen.
    ich weiß es ist nicht die gute englische art und sicher gehts besser und vorallem schlauer, aber mir fiel nichts ein und es musste schnell gehen.

    so: @ministry: habe die mysql_error() eingebaut an der stelle die du nanntest, aber es kommt keine fehlermeldung bzw. es kommt die gleiche Fehlermeldung wie vorher!

    woran könnte es noch liegen??? an den gesamtzugriffen auf den mysql server???
    ich habe keinen plan mehr und bin für jede Hilfe DANKbar.

    THX bart



  • also, "supplied argument is not a valid MySQL result resource in " kommt dann, wenn das Ergebnis von der Abfrage kein mysql-Ressource-Objekt ist, weil die Query fehlschlägt. Was an der Abfrage falsch ist, sagt dir mysql_error().

    Anders gesagt: zu jedem "supplied argument...." Fehler gehört du ein mysql_error an der query, die die Ressource erstellen soll.

    Du musst vorher eine Verbindung zur Datenbank mit mysql_connect() aufgemacht haben, und die Datenbank mit mysql_select_db() ausgewählt haben.

    Auch an den Stellen kannst du "or die(mysql_error())" dranhängen, um zu sehen, ob du dich vielleicht falsch verbindest.

    Wenn du ohne richtige Verbindung ein query absetzt, dann gibt mysql_error() z.b. "No database selected" zurück (das müsste es dann also jetzt auch tun, du das an der Stelle an mysql_query drangehängt hast, und dies wirklich die Stelle ist, um die es geht).

    Und ansonsten: Guck dir mal die SQL-Funktionen zur Datumsbestimmung an unter http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.html
    (denn alle Daten rüberzuholen und dann in php zu verwursten ist ... noch weniger als nicht die feine englische 😉 )



  • okay...
    das mit der Datumsbestimmung gebe ich dir auf alle fälle recht und ich werde und muss mir das auch anschauen, das weiß ich.

    so nun nochmal zu dem problem an sich.
    habe jetzt vor der mysql_abfrage und in der funktion selber mal den mysql_connect und mysql_select_db direkt reingeschrieben mit or die (mysql_error())

    fehlermeldung die ich bekomme: Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in

    ABER: wie bereits gesagt, rufe ich die funktion ja aus ner for schleife auf wo a von 0 bis 7 läuft.
    laut meiner browserausgabe wird die funktion 4 mal korrekt aufgerufen, der db connect und die mysql_query korrekt ausgeführt und erst beim 5. mal gibt er mir diese fehlermeldung. obwohl sich ja nichts geändert hat.
    wie kann das denn sein, oder bin ich gerade komplett bescheuert und seh das problem nich.... sorry.



  • Also schlägt schon mysql_select_db() fehl.

    Versuchst du bei mysql_select_db() ein Verbindungshandle mit anzugeben? Wenn ja lass das mal weg, das braucht man nur, wenn man mit mehreren unterschiedlichen Datenbankverbindungen hantieren will.

    // mit handle:
    $handle = mysql_connect('localhost', 'root', '') or die("connect: " . mysql_error());
    
    // das macht dann deine Fehlermeldung, wenn handle kaputt ist:
    mysql_select_db('dbname', $handle) or die("select-db: " . mysql_error());   
    
    // also ohne
    mysql_connect('localhost', 'root', '') or die("connect: " . mysql_error());
    mysql_select_db('dbname') or die("select-db: " . mysql_error());
    


  • hab ich gemacht wie du sagtest.

    der mysql_select_db scheint zu funzen, denn die fehlermeldung lautet nun wieder:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

    *total ratlos* 😕



  • kannst du grad nochmal alles zusammen im kleinstmöglichen fehlschlagenden Beispiel geben bitte?



  • Hat der Provider irgend eine Beschränkung? Kannst Du es mit einer lokalen Installation nachvollziehen (XAMP)?



  • @ministry:
    aufruf einer funktion aus einer for schleife.
    Funktion an sich:

    function get_list ($param) {
      //    $param    -->    heutiges Datum deutsch
      $abfrage=mysql_query("SELECT * FROM new_calender") or die(mysql_error());
      while ($row=mysql_fetch_array($abfrage)) {
         // irgendwas machen
      }
    }
    

    Fehlermeldung, auch wenn ich den Verbindungshandler beim mysql_connect / mysql_select_db weglasse:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

    sobald ich den verbindungshandler setze und die mysql_connect / mysql_select_db mit or die (mysql_error()) direkt in die oben genannte funktion schreibe erhalte ich folgende Fehlermeldung:
    Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in

    ABER: der fehler tritt nicht immer auf. da der aufruf der funktion aus einer for schleife kommt, wird dieses ja mehrfach "geladen" und ich sag mal bei 75% der aufrufen funktioniert auch alles bestens nur bei den anderen 25% bringt der mir solche fehler...

    @witte:
    tja das ist ein problem. denn ich habe nur die zugangsdaten für phpmyadmin und einem Webfrontend / Adminbereich bekommen aus dem ich eine neue Webanwendung generieren soll. das ist schon etwas schwierig. die inhaberin der seite kann zu einem provider oder dergleichen gar nichts sagen, da sie sich damit nichts beschäftigt hat und es komplett ausgelagert hatte und die andere firma nicht mehr existiert oder verkracht sind etc etc ich weiß es nicht.
    ansonsten werd ich wohl auf meinem pc mir die umgebung zusammenbauen und es lokal mal testen müssen....



  • Das hört sich komisch an. Am Code liegt es nicht, eventuell ist da was an der Installation im Eimer.

    Welche Version von MySQL ist da denn drauf (http://de3.php.net/manual/de/function.phpinfo.php) ?

    Lokal zu testen ist aber sowieso in jedem Fall bequemer.



  • also:
    phpmyadmin: 2.9.1.1
    mysql: 4.0.18

    kann man das irgendwie umgehen??? oder den fehler abfangen???



  • Bart Simpson schrieb:

    sobald ich den verbindungshandler setze und die mysql_connect / mysql_select_db mit or die (mysql_error()) direkt in die oben genannte funktion schreibe erhalte ich folgende Fehlermeldung:
    Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in

    In die Funktion die in der for-Schleife aufgerufen wird? Das heißt du öffnest die Verbindung bei jedem Schleifendurchlauf erneut?? Da würd ich als Server aber auch streiken 🙂

    mysql_close();
    

    Oder den Verbindungsaufbau an den Seitenanfang setzen, sodass die Verbindung nur noch einmal hergestellt wird.

    LG, Micha



  • @RadnomAccess85:

    den mysql_connect befehl hatte ich nur zu testzwecken in die funktion geschrieben, ansonsten / normal wird nicht mit jedem schleifendurchlauf die verbindung geöffnet und bekomme so auch die fehler.



  • was macht der denn wenn du ein mysql_fetch_assoc oder mysql_fetch_row machst



  • Wäre auch ganz interessant was die funktion denn genau macht oder wie das ende aussieht ...



  • so hier nochmal die function, noch ein bissel geändert.

    function get_list ($param) {
      //	$param	-->	heutiges Datum deutsch
      $splitten=explode(".", $param);
      $anfang=date("U", mktime(0,0,0,$splitten[1],$splitten[0],$splitten[2]));
      $ende=date("U", mktime(23,59,59, $splitten[1],$splitten[0],$splitten[2]));
      //echo "anfang: ".$anfang;
      //echo "<br>ende: ".$ende;
      $abfrage=mysql_query("SELECT * FROM new_calender WHERE end BETWEEN '$anfang' AND '$ende'") or die(mysql_error());
      while ($row=mysql_fetch_array($abfrage)) {
        $nummern[]=$row["id"];
      }
      return ($nummern);
    }
    

    die funktion soll aus der tabelle new_calender in der spalte end (timestamp) alle möglichen ID´s abhängig des übergebenen Datums bestimmen.
    Fehler: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
    wie ihr seht habe ich mal ein echo eingefügt, der mit bedigungen für die where abfrage ausgeben soll.
    an den stellen wo der fehler im browser / script auftaucht, bekomme ich für $anfang den wert: 946681199 (dies gilt auch für $ende)
    bei den anderen funzt es perfekt.
    wenn ich jetzt allerdings die where bedingung in der mysql_query weglasse, bekomme ich die fehler nicht mehr.
    also muss es ja jetzt der fehler bei der übergabe des parameters liegen, oder der date funktion... seh ich das richtig?



  • gibt er dir da auch wirklich was zurück, haste das getestet oder gibt er dir null oder sogar nen sql error zurück



  • Hallo,

    welchen Datentyp hat denn das Feld in der DB? Der Timestamp wird als INT übergeben. Kann es sein dass sich die Typen nicht vertragen?

    LG, Micha



  • @priest: ich bekomme 0 zurück

    @random: datentyp in der db ist ebenfalls "int"

    weiß momentan echt nicht weiter und teste und teste.. keine ahnung woran es liegen könnte



  • while (row=mysql_fetch_array(row=mysql\_fetch\_array(abfrage)) {
    nummern[]=row["id"];

    mach mysql_fetch_assoc anstatt mysql_fetch_array

    du kannst nicht mit den spalten namen arbeiten wenn du nur ein array nimmst das mit index arbeitet. Probiers mal


Anmelden zum Antworten