SQL-Funktion (mit ifs) für mehrere Anfragen konfigurieren

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

  • SQL-Funktion (mit ifs) für mehrere Anfragen konfigurieren

    Hallo,

    ich habe eine Funktion die per SQL Datensätze aus der Datenbank lädt.

    Ich möchte nur ungerne die gleiche Funktion kopieren und die WHERE klausel entfernen, also setze ich auf eine If-Abfrage innerhalb des SQL Strings.

    es gibt zwei aufrufe, der eine ist ohne die "id", dabei sollen alle datensätze ausgegeben werden.
    dann gibt es den aufruf mit "id", dabei soll nur ein datensatz ausgeliefert werden.

    PHP-Code:
        public function fetchPageData($id) {
            
    $page_content "";
            
    $db_result $this->database->runSQLQuery("
            SELECT *,
            DATE_FORMAT(last_edit, '%d.%m.%Y') AS date_format,
            DATE_FORMAT(last_edit, '%H:%i:%s') AS time_format FROM "
    .GLOBAL_PAGE_DB."
            "
    .($id?' ':"WHERE id='".$id."'")
            );
            while(
    $row mysql_fetch_array($db_resultMYSQL_ASSOC)) {
                
    $state_name $this->state->Pull_State_Name($row['state']);
                
    $page_content[] = array(
                    
    'id' => $row['id'],
                    
    'id_order' => $row['id_order'],
                    
    'name' => $row['name'],
                    
    'url' => $row['url'],
                    
    'content' => stripslashes($row['content']),
                    
    'date' => $row['date_format'],
                    
    'time' => $row['time_format'],
                    
    'state' => $row['state'],
                    
    'state_name' => $state_name,
                );
            }
            return 
    $page_content;
        } 
    das problem: der aufruf ohne id funktioniert, der aufruf mit id funktioniert nicht, auch hier werden alle datensätze angezeigt.

    hat vielleicht jemand eine ahnung warum?

    mfg

  • #2
    Diese „type-cast-to-bool“-Bedingung beim Test auf „$id“ finde ich etwas merkwürdig.

    Wie rufst du die Funktion denn jeweils konkret auf? Und Bonusfrage: Welcher Query-String wird dabei generiert?

    Kommentar


    • #3
      hallo,

      es gibt zwei aufrufe, der eine zum darstellen der "seiten" in form von:

      PHP-Code:
      $id TRUE;
      $tpl->assign('content_array'$content->fetchContenData($id)); 
      und dann gibt es einen aufruf innerhalb der switch-case abfrage:

      PHP-Code:
              case "page":
                  
      $tpl->assign('page_content_array'$pages->fetchPageData($_GET['id']));
                  
      $tpl->display('page.html');
                  break; 
      wenn ich mir nun per var_dump $id angucke, ist es im oberen teil der seite der wert 1 und zeigt mir alle seiten an (richtig).

      im unteren teil soll dann nur die gewählte seite angezeigt werden. die id der seite ist zb 2. auch var_dump gibt im unteren teil dafür eine 2 aus, dennoch werden alle möglichen seiten angezeigt.

      zum sql string:

      PHP-Code:
              echo ("
              SELECT *,
              DATE_FORMAT(last_edit, '%d.%m.%Y') AS date_format,
              DATE_FORMAT(last_edit, '%H:%i:%s') AS time_format FROM "
      .GLOBAL_PAGE_DB."
              "
      .($id?' ':"WHERE id='".$id."'")
              ); 
      PHP-Code:
      SELECT *,         DATE_FORMAT(last_edit'%d.%m.%Y') AS date_format,         DATE_FORMAT(last_edit'%H:%i:%s') AS time_format FROM blog_page 
      also $id scheint garnicht abgefragt zu werden.

      Kommentar


      • #4
        Also…

        PHP-Code:
        ($id?' ':"WHERE id='".$id."'"
        …gibt jedenfalls für alle numerischen IDs ungleich 0 den String ' ' zurück. Das ist sicherlich anders beabsichtigt.

        Kommentar


        • #5
          Liegt wahrscheinlich daran, dass nie eine $id > 0 übergeben wird.
          Denn sonst sieht das Script gut aus.
          Und da ich noch nie einen auto_increment id < 1 gesehen habe, kann man durchaus $id ? ... : ... verwenden.
          Bestenfalls würde ich (int) $id verwenden.
          Wer keine Arbeit hat, der macht sich welche
          XAMPP + NetBeans + XDebug(Xampp included) + SVN == FUN

          Kommentar


          • #6
            Zitat von Blackbenji Beitrag anzeigen
            wenn ich mir nun per var_dump $id angucke, ist es im oberen teil der seite der wert 1 und zeigt mir alle seiten an (richtig).
            1 als „Pseudo-ID“ für „alle Seiten“ zu benutzen, und für die einzelnen Seiten dann IDs von 2 ab aufwärts zu vergeben, erscheint mir ziemlich widersinnig. Damit gibst du einem ID-Wert eine Sonderbedeutung, die mit der simplen logischen Bedeutung der restlichen IDs, einfach nur einen bestimmten Inhalt eindeutig zu identifizieren, nicht zusammen passt.

            Schreib deine Funktion einfach so, dass sie den Parameter nur optional übergeben bekommt:
            PHP-Code:
            public function fetchPageData($getSpecificPageByid false) {
              
            // …
              
            queryfunction('query' . ($getSpecificPageByid !== false ' WHERE id = ' $getSpecificPageByid '') );
              
            // …
            }

            $foo->fetchPageData();     // not asking for a specific page   -> fetches all pages
            $foo->fetchPageData(4711); // asking for a specific page by id -> fetches that specific page 
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              hallo wahsaga,

              vielen dank, ich habe es bei mir angepasst, und so funktioniert es auch!
              gibt es irgendwo eine erklärung zu den optionalen parametern? lese jetzt das erste mal davon.

              das mit den id's war etwas blöd beschrieben. 1 gibt nicht alle seiten an, sondern 1 hat var_dump ausgespuckt. nur das verhalten war richtig. id 1,2,3,4...sind entsprechende seiten.

              danke für die unterstützung!

              Kommentar


              • #8
                Da gibt es eigentlich nur eine Regel:
                Nach einem optionalen Parameter darf kein nicht-optionaler Parameter mehr kommen.
                Also das ist Fail:
                PHP-Code:
                function test($a$b ''$c
                Das aber geht:
                PHP-Code:
                function test($a$b ''$c null
                Dann gibt es noch :
                PHP: func_get_args - Manual
                und
                PHP: func_num_args - Manual
                und viele mehr...
                Wer keine Arbeit hat, der macht sich welche
                XAMPP + NetBeans + XDebug(Xampp included) + SVN == FUN

                Kommentar


                • #9
                  Zitat von Blackbenji Beitrag anzeigen
                  gibt es irgendwo eine erklärung zu den optionalen parametern? lese jetzt das erste mal davon.
                  http://www.php.net/manual/en/functio...uments.default
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar

                  Lädt...
                  X