Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten einer MySQL-ressource durchsuchen

Einklappen

Neue Werbung 2019

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

  • Daten einer MySQL-ressource durchsuchen

    Hallo Community,

    ich bin momentan an der Programmierung eines kleines Skriptes mit welchem ich einen Datensatz einer SQL-Datenbank mittels preg_grep nach Werten durchsuchen möchte.

    -An die Datenbank geht mittels:
    Code:
    $ressource=mysql_query(<query>);
    eine Select abfrage raus.

    -Die Rückantwort wird über:
    Code:
    $result=mysql_fetch_array($ressource, MYSQL_NUM);
    in ein Array umgewandelt.

    Über
    Code:
    var_dump($result);
    kann ich mir den Inhalt des Arrays anzeigen lassen.

    Ich möchte diese Daten über
    Code:
    preg_grep("/<reg_expr>/")
    auswerten.

    Mein bisheriger Versuch war:
    Code:
    $ergebnis_new=var_dump($result);
    $ergebnis_final=preg_grep("/<reg_expr>/",$ergebnis_new);
    echo"<$ergebnis_final>";
    Ich bekomme als Ergebnis nur <> zurück.
    Die Variable $ergebnis_final scheint keine Daten zu enthalten.
    Die Daten der Ressource werden aber von
    Code:
    var_dump($result);
    weiterhin ausgegeben.

  • #2
    es scheint mir sinvoller schon bei sql ein muster zu übergeben-> like wäre da ein stichwort.

    um es so zu machen, wie du willst, musst du das array durchlaufen:
    PHP-Code:
    foreach($array as $item){ echo $item;} 
    array filter wäre selbstredent bessser: http://php.net/manual/de/function.array-filter.php

    Kommentar


    • #3
      Zitat von harrier21a Beitrag anzeigen
      Über
      Code:
      var_dump($result);
      kann ich mir den Inhalt des Arrays anzeigen lassen.
      Hier siehst du doch selbst das $result ein Array ist. Welches Feld willst du denn mit preg_grep() bearbeiten?

      Kommentar


      • #4
        Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
        Choosing an API
        Warum man mysql* generell nicht (mehr) nutzen sollte.
        Wie man von mysql* auf PDO umsteigt
        Wissenswertes zum Thema SQL-Injection

        Kommentar


        • #5
          Ich glaube ich hab in meinem ersten Post zu wenig Infos geliefert.

          Ich möchte ein Nagios Plugin welches eine SQL-Tabelle mittels SQL-Statement durchsucht. Den Ergebniswert (oder das Array) möchte ich in einer Variable aus welcher ich mittels Reg-Ex den gesuchten Wert filtern kann um ihn gegen einen Schwellwert zu prüfen.

          (hab die Vermutung, dass ich das Problem viel zu komplex angehe)

          Mit
          Code:
          $ergebnis_final = var_export($result, true);
          bekomme ich bei der Ausgabe mittels
          Code:
          echo"$ergebnis_final"
          das Array mit den Dateninhalten.

          Warum bekomme ich bei der Abfrage mittels
          Code:
          $Ergebnis = preg_grep("/[4-7]/",$ergebnis_final);
          Die Meldung, dass der zweite Parameter kein Array ist?

          Kommentar


          • #6
            Ist dir klar was var_export und var_dump machen? $result ist dein Array, der Rest ist quatsch...

            Kommentar


            • #7
              @erc:

              Hab gerade nochmal nachgelesen was var_dump und var_export tun.

              Soweit ich es verstanden habe, sind beide Funktionen nicht für meine Zwecke geeignet da sie lediglich die Informationen zur Variablen zurückgeben und nicht deren Inhalt. (Hab sie auskommentiert.)
              (Habe ich das soweit korrekt erfasst?)

              Kommentar


              • #8
                Zitat von harrier21a Beitrag anzeigen
                Soweit ich es verstanden habe, sind beide Funktionen nicht für meine zwecke geeignet da sie lediglich die Informationen zur Variablen zurückgeben und nicht deren Inhalt.
                Jein. Bei Arrays und primitiven Datentypen entspricht ja die Information ja so ziemlich dem Inhalt. Was du aber mit var_export() gemacht hast, ist aus einem Array einen String zu machen.

                Zitat von harrier21a Beitrag anzeigen
                In $result stehen nur die Daten der Ressource nicht aber das Array mit seinen einzelnen Elementen. Somit kann ich $result ja nicht direkt mittels preg_grep() durchsuchen.
                Nein. mysql_fetch_array() gibt eine Zeile von der Abfrage zurück, und rückt dann den Datenzeiger weiter. D.h. beim zweiten Aufruf bekommst du die zweite Zeile, beim dritten die dritte usw. D.h. du möchtest vermutlich den Aufruf in einer Schleife verwenden.

                Also ca. so:
                PHP-Code:
                // $ressource = dein Query hier
                while ($row mysql_fetch_array($ressource)) {
                  
                // Zeige alle Felder mit 1
                  
                if ($matches preg_grep("/1"/, $row)) { 
                    
                // true
                  
                } else {
                    
                // false
                  
                }

                Bitte nicht so verwenden, sondern zuerst die Links von rkr durchlesen.

                Kommentar


                • #9
                  Zitat von rkr Beitrag anzeigen
                  Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
                  Choosing an API
                  Warum man mysql* generell nicht (mehr) nutzen sollte.
                  Wie man von mysql* auf PDO umsteigt
                  Wissenswertes zum Thema SQL-Injection
                  Ich habe mir die Funktionsweise von PDO angeschaut und werde versuchen meinen bestehenden Programmcode anzupassen, da der alte Syntax irgendwann nicht mehr unterstüzt wird.
                  Leider ist PDO nur mittels Objektorientierung nutzbar.
                  Im Bezug auf objektorientierte Programmierung habe ich noch keine Erfahrung. Mal schauen wie weit ich komm.

                  Kann ich in PHP Objektorientierung und prozedurale Programmierung mischen?

                  Soweit danke an alle für die bisherige Unterstützung .

                  Kommentar


                  • #10
                    Ja, du kannst mischen.

                    Kommentar


                    • #11
                      Hallo Leute,

                      die funktion preg_grep() bemängelt, dass ihr zweites Argument kein Array sei.
                      Was gibt mir meine Abfrage,dann zurück?

                      PHP-Code:
                      #!/usr/bin/php
                      <?PHP
                              
                          define
                      ('0','OK');
                          
                      define('1','WARNING');
                          
                      define('2','CRITICAL');
                          
                      define('3','UNKNOWN');

                          
                      $hostname $argv[2];
                          
                      $user $argv[4];
                          
                      $passwort $argv[6];
                          
                      $database $argv[8];
                          
                      $query $argv[10];
                          
                      #$regexpr = $argv[12];
                          #$warningvalue = $argv[12];
                          #$criticalvalue =$argv[14];

                      $db = new PDO('mysql:host=$hostname;dbname=$database;charset=utf8''$user''$passwort');

                      $ergebnis $db->query($query);

                      $Ergebnis preg_grep("/[4-7]/",$ergebnis)
                          
                      for(
                      $i=0$i count($Ergebnis); $i++) 
                          {
                              echo
                      "  Ergebnis_regex$i=$Ergebnis[$i] ";
                          }
                          
                      ?>

                      Kommentar


                      • #12
                        vielleciht weil du die variablen in den strings falsch nutzt.
                        könnte afair zumindest so eine fehlermeldung bringen.

                        vielleicht doch mal noch mit grundlagen beschäftigen. umgang mit strings gehört da schon dazu

                        nächstes mal bitte die zeile markieren in der die fehlermeldung auftritt. keiner hat lust zu zählen

                        edit: stand da nicht vorhin noch was von parse error und T_variable oder so?
                        die ursache bleibt allerdings die selbe bei dem code
                        liebe Grüße
                        Fräulein Dingsda

                        Kommentar


                        • #13
                          PHP-Code:
                                   public function DB_Connect ()
                                  {
                                  
                          $db = new PDO('mysql:host=$hostname;dbname=$database;charset=utf8''$user''$passwort');
                                  }
                              }

                          $ergebnis $db->query($query); 
                          kann so ja nichts werden, c&p ?
                          fehler abfangen wäre trotzdem nett.

                          Kommentar


                          • #14
                            editiere deine beiträge bitte nicht so, dass der zusammenhang zu nachfolgenden beiträgen verloren geht.
                            ständig ne neue fehlermeldung zu schreiben und die alte zu löschen ist einfach verwirrend zumal die neue fehlermeldung jetzt auch nicht mehr zum code passt.

                            ließ nochmal das verlinkte tutorial zu pdo und das manual von php.net

                            die funktion preg_grep() bemängelt, dass ihr zweites Argument kein Array sei.
                            Was gibt mir meine Abfrage,dann zurück?
                            steht im manual
                            http://www.php.net/manual/de/pdo.query.php
                            liebe Grüße
                            Fräulein Dingsda

                            Kommentar


                            • #15
                              Das mit dem Ändern des Beitrages war, weil ich mitlerweile selbst eine Lösung gefunden hatte.

                              Werde nächstes mal den Beitrag stehen lassen und meine gefundene Lösung dazu notieren.

                              Bin simultan bereits auf php.net am Suchen nach möglichen Lösungen, allerdings versteh ich teilweise die Beschreibungen nicht ganz.

                              @moma:
                              Hab mittlerweise die DB-Connection ohne class bzw. function kapselung geschrieben und es scheint zu funktionieren.

                              Kommentar

                              Lädt...
                              X