[Bug] mysql_num_rows in MySQL-Klasse?!?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Bug] mysql_num_rows in MySQL-Klasse?!?

    Hallo!

    Ich hab eine eigene MySQL-Klasse, in der ich diverse Funktionen habe.
    Eine davon ist auch num_rows(), welche den PHP-Befehl mysql_num_rows ausführt.

    Mein Problem ist nun, dass ich dem PHP-Befehl bekanntermaßen eine Resource-ID übergeben muss.
    Dazu wird zuvor per $mysql->query() ein Query ausgeführt, welcher ja als Ergebnis eine Resource-ID enthält.

    Nun ist es gewöhnlich so, dass ich
    PHP-Code:
    $mysql->num_rows($mysql->query("SELECT irgendwas FROM irgendwo")); 
    nutze.
    Das funktioniert einwandfrei - bis zu dem Punkt, an dem ich eben diese Verschachtelung nicht nutze, sondern es einzeln erledige, z. B. so:
    PHP-Code:
    $mysql->query("SELECT irgendwas FROM irgendwo");
    $mysql->num_rows(); 
    Und genau hier kommt es zum Fehler, denn num_rows() bekommt keine Resource-ID übergeben und meldet mir deshalb:
    Warning: Missing argument 1 for num_rows() in /home/www/web8/html/test.php on line 73
    Nun hab ich versucht, dass Problem so zu umgehen:
    PHP-Code:
        function num_rows($numrowsQuery)
    {
        
    $numrowsQuery == $this->num_rows mysql_num_rows($this->query) : $this->num_rows $numrowsQuery;

        return 
    $this->num_rows;

    Sofern beim Aufruf von num_rows nichts in Klammern übergeben wird, soll die Resource-ID des letzten Querys genutzt werden.
    Die Variable $numrowsQuery ist direkt am Anfang der Klasse deklariert.

    Im Prinzip funktioniert das auch, aber warum kriege ich dann trotzdem diese Warning-Meldung?!?

    Bitte helft mir! - Danke schon mal im Voraus dafür!

    MfG, Martin!

  • #2
    ohne alles zu lesen, da du mal wieder nicht ausreichend umbrüche drin hast,


    $DB->Query():
    $this->result =mysql_query($sql);

    $DB->NumRows():
    return mysql_num_rows($this->result);

    fertig!!

    Kommentar


    • #3
      mache aus:
      PHP-Code:
      function num_rows($numrowsQuery) ... 
      einfach
      PHP-Code:
      function num_rows($numrowsQuery=0) ... 

      Kommentar


      • #4
        So wie ich das sehe hast Du eine Funktion die Parameter erwartet, Du aber in dem einen Fall keine übergibst. Sagt auch die Fehlermeldung aus.

        Eine saubere Lösung nach dem Objektorientierten Ansatz wäre eine zweite Funktion zu schaffen:

        PHP-Code:
        function num_rows()
        {
            return 
        $mysql_num_rows($this->query);

        Programmiere erst seeit ca. 1 Monat in PHP und hab mich noch nicht mit Klassen beschäftigt, denke aber, das sollte auch in PHP möglich sein.
        Zuletzt geändert von Godfrey; 05.03.2005, 11:56.

        Kommentar


        • #5
          Original geschrieben von TobiaZ
          ohne alles zu lesen, da du mal wieder nicht ausreichend umbrüche drin hast,


          $DB->Query():
          $this->result =mysql_query($sql);

          $DB->NumRows():
          return mysql_num_rows($this->result);

          fertig!!
          Wieso hab ich bitte keine Umbrüche?!? - Ich hab 1024x768 und KEINE horizontale Scroll-Leiste!

          Und dein Code hilft mir nicht wirklich weiter, weil ich's ja eigentlich so hab, wie du's mir empfiehlst!


          @ asp2php: Und wenn ich das so mache, ist's dann egal, ob ich $mysql->num_rows($mysql-query()); mache oder $mysql->query(); und danach $mysql->num_rows();?!?


          @ Godfrey: Ja aber dazu ist doch der Tenary-Operator gedacht: der überprüft, ob der Parameter vorhanden ist und wenn ja, soll mysql_num_rows anhand des Parameters durchgeführt werden - sonst soll der letzte Query genommen werden.
          Oder hab ich da 'nen Logikfehler drin?!?

          @ Edit @ Godfrey: Naja, ich will ja, dass INNERHALB der Funktion num_rows() geprüft wird, ob ein Parameter übergeben wurde und wenn ja, soll dieser genutzt werden, ansonsten soll der letzte Query als Parameter verwendet werden.

          Kommentar


          • #6
            asp2php hat Dir nur eine Möglichkeit gezeigt wie Du sozusagen einen Defaultparameter in der Funktion setzt. Rufst Du die Funktion ohne Parameter auf wird die 0 genommen, andernfalls der Wert aus der Variablen.

            Der Unterschied ist, Du hast eine Funktion die eine Variable erwartet. Du überprüfst nicht ob eine Variable übergeben wird, sondern den Inhalt einer Variablen.

            Versuch mal die zweite Funktion zu implementieren, sollte dann gehen. In dieser wird ja genau der IF-Wert der ersten Abfrage zurückgegeben.

            Vielleicht nochmal deutlicher, die Funktion ERWARTET einen Parameter, im zweiten Fall übergibst Du keinen, genau das sagt auch die Fehlermeldung aus.

            Kommentar


            • #7
              Original geschrieben von Godfrey
              asp2php hat Dir nur eine Möglichkeit gezeigt wie Du sozusagen einen Defaultparameter in der Funktion setzt. Rufst Du die Funktion ohne Parameter auf wird die 0 genommen, andernfalls der Wert aus der Variablen.

              Der Unterschied ist, Du hast eine Funktion die eine Variable erwartet. Du überprüfst nicht ob eine Variable übergeben wird, sondern den Inhalt einer Variablen.

              Versuch mal die zweite Funktion zu implementieren, sollte dann gehen. In dieser wird ja genau der IF-Wert der ersten Abfrage zurückgegeben.

              Vielleicht nochmal deutlicher, die Funktion ERWARTET einen Parameter, im zweiten Fall übergibst Du keinen, genau das sagt auch die Fehlermeldung aus.
              Ja, aber ich setze doch direkt am Anfang der Klasse per $numrowsQuery = 0; die Variable auf 0?!?
              Wieso muss ich das beim Parameter nochmal tun? - Ich denke, Variablen, die man oben in der Klasse definiert, gelten überall in den Funktionen?!?

              Und wenn ich function num_rows ($numrowsQuery = 0) mache, wird $numrowsQuery auf 0 gesetzt, wenn kein Parameter übergeben wird und sonst wird $numrowsQuery auf den Wert vom übergebenen Parameter gesetzt?!?


              LG und danke schon mal!

              Kommentar


              • #8
                Re: [Bug] mysql_num_rows in MySQL-Klasse?!?

                Original geschrieben von Eagle
                Warning: Missing argument 1 for num_rows() in /home/www/web8/html/test.php on line 73
                Die Fehlermeldung sagt doch genau aus, es fehlt beim Aufruf der Funktion num_rows() ein Argument = Parameter = Variable.

                Du hast keine Funktion num_rows() die KEINEN Parameter erwartet, deshalb auch die Fehlermeldung...

                Das Du die Variable am Anfang auf 0 setzt hat hier keine Bedeutung, da es nicht darum geht, dass die Variable vorhanden ist, sondern es geht darum, dass in der Funktion keine übergeben wird.

                Oder anders gesagt, Du kannst in einer Funktion NICHT überprüfen ob eine Variable übergeben wurde, sondern nur welchen Wert eine Variable hat. Das sind eigentlich Grundlagen der Programmierung.

                Eine andere Mölglichkeit wäre eine Funktion(...) zu machen, dieser könntest Du variabel Parameter übergeben. Da musst Dich dann im Code selbst darum kümmern ob und welche vorhanden ist. Ist aber an der Stelle nicht sauber.

                Die sauberste Lösung ist die, welche ich mit dem einführen einer zweiten Funktion gezeigt habe.

                Kommentar


                • #9
                  Re: Re: [Bug] mysql_num_rows in MySQL-Klasse?!?

                  Original geschrieben von Godfrey
                  Die Fehlermeldung sagt doch genau aus, es fehlt beim Aufruf der Funktion num_rows() ein Argument = Parameter = Variable.

                  Du hast keine Funktion num_rows() die KEINEN Parameter erwartet, deshalb auch die Fehlermeldung...

                  Das Du die Variable am Anfang auf 0 setzt hat hier keine Bedeutung, da es nicht darum geht, dass die Variable vorhanden ist, sondern es geht darum, dass in der Funktion keine übergeben wird.

                  Oder anders gesagt, Du kannst in einer Funktion NICHT überprüfen ob eine Variable übergeben wurde, sondern nur welchen Wert eine Variable hat. Das sind eigentlich Grundlagen der Programmierung.

                  Eine andere Mölglichkeit wäre eine Funktion(...) zu machen, dieser könntest Du variabel Parameter übergeben. Da musst Dich dann im Code selbst darum kümmern ob und welche vorhanden ist. Ist aber an der Stelle nicht sauber.

                  Die sauberste Lösung ist die, welche ich mit dem einführen einer zweiten Funktion gezeigt habe.
                  Hmm, hab grad via "Versuch-Irrtum-Prinzip" rausgefunden, dass ich den 3-fachen Operator in der Klammer hinter function num_rows nicht verwenden kann - das ist mies...

                  Wie dem auch sei, dann mach' ich das mit $numrowsQuery = 0, weil so funzt das Ganze und 2 Funktionen für ein und den selben PHP-Befehl ist dann doch etwas absurd...

                  Dass das Grundlagen der Programmierung sein mögen, kann durchaus sein. Jedoch bring ich mir PHP eigentlich so gut wie selbst bei - ohne Buch, mit wenigen Tuts und SEEEEEHR vielen Versuchen...
                  Von daher übe bitte etwas Nachsicht, denn sooo lange bin ich auch noch nicht im PHP-OOP-Geschäft!

                  Kommentar


                  • #10
                    Mhhh, hab Dir keinen Vorwurf gemacht.

                    Aber es gibt immer mehrere Möglichkeiten, hier sind es das saubere oder unsaubere Programmieren.

                    Solltest Du ernsthaft daran denken Programmierung zu Deinem Beruf zu machen wäre es sehr wichtig sauber zu programmieren. Das hilft in erster Linie Dir, vor allem bei der Fehlersuche.

                    Was die beiden Funktionen angeht, beide Funktionen haben eine andere Aufgabe. In der OO-Programmierung nennt man das überladene Funktionen und kommen sehr häufig vor.

                    Und sieh das bitte nicht als Zurechtweisung an, das sind einfach Ratschläge von jemand der schon ca. 20 Jahre Programmiererfahrung hat.

                    Kommentar


                    • #11
                      Original geschrieben von Godfrey
                      Mhhh, hab Dir keinen Vorwurf gemacht.

                      Aber es gibt immer mehrere Möglichkeiten, hier sind es das saubere oder unsaubere Programmieren.

                      Solltest Du ernsthaft daran denken Programmierung zu Deinem Beruf zu machen wäre es sehr wichtig sauber zu programmieren. Das hilft in erster Linie Dir, vor allem bei der Fehlersuche.

                      Was die beiden Funktionen angeht, beide Funktionen haben eine andere Aufgabe. In der OO-Programmierung nennt man das überladene Funktionen und kommen sehr häufig vor.

                      Und sieh das bitte nicht als Zurechtweisung an, das sind einfach Ratschläge von jemand der schon ca. 20 Jahre Programmiererfahrung hat.
                      Ja, also, ähm, naja, ich werd' SEHR WAHRSCHEINLICH (!) ab Herbst ein Berufsakademie-Student für Software-Entwicklung sein...

                      Von daher bin ich eigentlich IMMER um sauberen und korrekten Code bemüht.

                      Wie sollte es denn IN ETWA aussehen, wenn's sauberer Code sein soll?!?

                      Kommentar


                      • #12
                        Die Lösung hab ich in meinem ersten Posting hier bereits beschrieben.

                        Kommentar


                        • #13
                          Original geschrieben von Godfrey
                          Die Lösung hab ich in meinem ersten Posting hier bereits beschrieben.
                          Also quasi so:

                          PHP-Code:
                          function num_rows ()
                          {
                              return 
                          mysql_num_rows($this->query);
                          }

                          function 
                          numRows ($numrowsQuery)
                          {
                              return 
                          mysql_num_rows($numrowsQuery);

                          Oder meintest du was Anderes?!?

                          Kommentar


                          • #14
                            Nicht ganz, Deine eine Funktion war ja dahingehend richtig, dass sie die Variable auf den WERT = 0 abgefragt hat. Das soll ja auch so bleiben, es muss nur die zweite Funktion dazukommen.

                            Ausser Du kannst sicher gehen, dass der Wert 0 nicht vorkommt.

                            Anderenfalls würde Deine Bussineslogik ja nicht mehr stimmen...

                            Ach so, nochwas ist mir aufgefallen soeben...

                            Beide Funtkionen MÜSSEN den gleichen Bezeichner haben, sonst ists ja wieder nicht OOP.

                            Aber wie gesagt, in PHP hab ich noch nicht OOP programmiert, also weiss ich im Moment nicht ob das geht. Ich habe hier allgemeine OOP-Technik vorrausgesetzt. Wenns jemand besser weiss bitte berichtigen.
                            Zuletzt geändert von Godfrey; 05.03.2005, 13:48.

                            Kommentar


                            • #15
                              Original geschrieben von Godfrey
                              Nicht ganz, Deine eine Funktion war ja dahingehend richtig, dass sie die Variable auf den WERT = 0 abgefragt hat. Das soll ja auch so bleiben, es muss nur die zweite Funktion dazukommen.

                              Ausser Du kannst sicher gehen, dass der Wert 0 nicht vorkommt.

                              Anderenfalls würde Deine Bussineslogik ja nicht mehr stimmen...
                              PHP-Code:
                              function num_rows ()
                              {
                                  return 
                              mysql_num_rows($this->query);
                              }

                              function 
                              numRows ($numrowsQuery 0)
                              {
                                  return 
                              mysql_num_rows($numrowsQuery);


                              Ist das also die finale Lösung?!?


                              Oder wäre das hier auch SAUBERER (!) Code:

                              PHP-Code:
                              function num_rows($numrowsQuery 0)
                              {
                                  return 
                              mysql_num_rows($numrowsQuery == $this->query $numrowsQuery);

                              Zuletzt geändert von ; 05.03.2005, 13:49.

                              Kommentar

                              Lädt...
                              X