Ankündigung

Einklappen
Keine Ankündigung bisher.

Wechsel von mySQL auf PDO

Einklappen

Neue Werbung 2019

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

  • Wechsel von mySQL auf PDO

    Hallo Leute,
    nach langer abstinenz wollte ich mal meine "Alten" Verbindungen auffrischen.
    Ja bei dem wechsel auf PHP7 ist das ein oder andere an mir vorbei gegangen.

    Ok es geht um meine Verbindung zur SQL Datenbank bzw. um das Suchen der Daten mit PDO
    Ich habe mal das ganze umgeschrieben aber irgendwo scheint ein Fehler zu sein. Wahrscheinlich habe ichdas Manual falsch interpretiert.

    Alt:
    PHP-Code:
    // Datenbank-Zugriff, -Abfrage und Array füllen
    include("db.php");


    $sql "SELECT datumzeit, radiation
            FROM arduino_schnee ORDER BY datumzeit DESC LIMIT 0,49;"
    ;
    $result mysql_query($sql) OR die(mysql_error());

    $i=0;
    while (
    $array=mysql_fetch_array($result)) {
            
    $datumzeit[$i]= strtotime($array[0]);
            
    $radiation[$i]=$array[1];
    $i++;
    };


    $query "SELECT ROUND(AVG(radiation),3) FROM arduino_schnee where datumzeit >= date_sub(now(), interval 24 hour)";

    if (
    $result mysql_query($query)) {
        while (
    $row mysql_fetch_row($result))
            
    $mittelwert_heute=$row[0];}


    $query "SELECT ROUND(AVG(radiation),3) FROM arduino_schnee where datumzeit >= date_sub(now(), interval 8064 hour)";

    if (
    $result mysql_query($query)) {
        while (
    $row mysql_fetch_row($result))
            
    $mittelwert_total=$row[0];}


    $query "SELECT ROUND(AVG(radiation),3) FROM arduino_schnee where datumzeit >= date_sub(now(), interval 30 minute)";

    if (
    $result mysql_query($query)) {
        while (
    $row mysql_fetch_row($result))
            
    $aktuell=$row[0];} 
    Neu:
    PHP-Code:
    // Datenbank-Zugriff, -Abfrage und Array füllen
    $pdo = new PDO('mysql:host=rdbms.strato.de;dbname=****''*****''*****');


    $sql "SELECT datumzeit, radiation
            FROM arduino_schnee ORDER BY datumzeit DESC LIMIT 0,49;"
    ;
    $result PDO::query($sql) OR die(PDOStatement::errorInfo());

    $i=0;
    while (
    $array=PDOStatement::fetch($result)) {
            
    $datumzeit[$i]= strtotime($array[0]);
            
    $radiation[$i]=$array[1];
    $i++;
    };


    $query "SELECT ROUND(AVG(radiation),3) FROM arduino_schnee where datumzeit >= date_sub(now(), interval 24 hour)";

    if (
    $result PDO::query($query)) {
        while (
    $row PDOStatement::fetch($result))
            
    $mittelwert_heute=$row[0];}


    $query "SELECT ROUND(AVG(radiation),3) FROM arduino_schnee where datumzeit >= date_sub(now(), interval 8064 hour)";

    if (
    $result PDO::query($query)) {
        while (
    $row PDOStatement::fetch($result))
            
    $mittelwert_total=$row[0];}


    $query "SELECT ROUND(AVG(radiation),3) FROM arduino_schnee where datumzeit >= date_sub(now(), interval 30 minute)";

    if (
    $result PDO::query($query)) {
        while (
    $row PDOStatement::fetch($result))
            
    $aktuell=$row[0];} 

  • #2
    Zitat von Thrillhouse Beitrag anzeigen
    Wahrscheinlich habe ichdas Manual falsch interpretiert.
    Ja. Das PDO-Objekt $pdo welches du mit new PDO(..) erzeugst solltest du auch verwenden. Schau dir dazu die Kurzanleitung PDO (PHP Data Objects) hier in der Wissenssammlung an.

    Kommentar


    • #3
      Da ich schon eine gefühlte ewigkeit kein PHP mehr geschrieben habe, muss ich mich erstmal wieder in die "alten" fetch styles einlesen um zu gucken, was ich da früher überhaupt genau haben wollte
      Warum vergisst man sowas immer so schnell

      Kommentar


      • #4
        Hier findest Du ebenfalls ein einfaches Tutorial: https://www.php-rocks.de/thema/49-ei...tatements.html
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          OK ich habe mal von Vorne angefangen und eine errorInfo erstellt


          PHP-Code:
          $pdo = new PDO('mysql:host=rdbms.strato.de;dbname=********''********''********');

          $statement $pdo->prepare("SELECT datumzeit, radiation FROM arduino_schnee ORDER BY datumzeit DESC LIMIT 0,49;");

          if(
          $statement->execute()) {
              while(
          $row $statement->fetch()) {
                  echo 
          $row['radiation']."<br />";
              }    
          } else {
              echo 
          "SQL Error <br />";
              echo 
          $statement->queryString."<br />";
              echo 
          $statement->errorInfo()[2];

          Soweit sogut...ich bekomme über den echo Befehl die letzten 49 Zeilen wieder.

          Ich habe jetzt meine Probleme meine alten Befehle für PDO anzuwenden.
          Wie bekomme ich das hin?
          PHP-Code:
          $result mysql_query($sql) OR die(mysql_error());

          $i=0;
          while (
          $array=mysql_fetch_array($result)) {
                  
          $datumzeit[$i]= strtotime($array[0]);
                  
          $radiation[$i]=$array[1];
          $i++;
          }; 

          Kommentar


          • #6
            Du solltest beim Erstellen der PDO-Instanz gleich die für dich richtigen Optionen mitgeben (und nicht alles in eine Zeile knallen):
            PHP-Code:
            $dsn 'mysql:host=rdbms.strato.de;dbname=********';
            $user '***';
            $password '***';
            $options = array(
              
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
              
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,  //or PDO::FETCH_OBJ
              
            PDO::ATTR_STRINGIFY_FETCHES => true,  //?
              
            PDO::ATTR_EMULATE_PREPARES => false,  //?
              
            PDO::ATTR_TIMEOUT => 1  //?
            );

            $pdo = new PDO($dsn$user$password$options); 
            Die mit ? kannst du erstmal weglassen, sind für Feinheiten. Dann lass dir mit var_dump() jewils $row ausgeben und schau dir an was da drin steht.

            EDIT: $dsn = 'mysql:host=rdbms.strato.de deutet etwa darauf hin das du auf deinem Produktivserver entwickelst? Das solltest du nicht tun! Nutze dafür eine lokale Testumgebung wie z.B. XAMPP.

            Kommentar


            • #7
              Also so richtig blicke ich es noch nicht. Der Code sieht jetzt so aus:
              PHP-Code:
              <?php

              $dsn 
              'mysql:host=rdbms.strato.de;dbname=*******';
              $user '***';
              $password '***';
              $options = array(
                
              PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                
              PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,  //or PDO::FETCH_OBJ

              );

              $pdo = new PDO($dsn$user$password$options);  

              $statement $pdo->prepare("SELECT datumzeit, radiation FROM arduino_schnee ORDER BY datumzeit DESC LIMIT 0,49;");

              $result $statement->execute(array("radiation" => $radiation));
              $radiation   $statement->fetch(PDO::FETCH_ASSOC);

              var_dump($radiation);
              var_dump($row)
              ?>
              Die Antwort:
              array(2) { ["datumzeit"]=> string(19) "2018-10-16 12:08:25" ["radiation"]=> string(5) "0.114" } NULL
              Darum gehts...Ich bin dran meinen JPgraph wieder zum laufen zu bringen. Der Spaß ist schon eine Weile her und mir Qualmt der Kopf
              Achtung alter Code!
              PHP-Code:
              <?php

              // JPGraph Library einbinden
              include ("jpgraph/jpgraph.php");
              include (
              "jpgraph/jpgraph_line.php");
              include (
              "jpgraph/jpgraph_date.php");
              include (
              "jpgraph/jpgraph_plotline.php");

              // Datenbank-Zugriff, -Abfrage und Array füllen
              include("db.php");


              $sql "SELECT datumzeit, radiation
                      FROM arduino_schnee ORDER BY datumzeit DESC LIMIT 0,49;"
              ;
              $result mysql_query($sql) OR die(mysql_error());

              $i=0;
              while (
              $array=mysql_fetch_array($result)) {
                      
              $datumzeit[$i]= strtotime($array[0]);
                      
              $radiation[$i]=$array[1];
              $i++;
              };


              $query "SELECT ROUND(AVG(radiation),3) FROM arduino_schnee where datumzeit >= date_sub(now(), interval 24 hour)";
                      
              //"SELECT ROUND(AVG(radiation),3) FROM arduino_schnee ORDER BY datumzeit DESC LIMIT 0,14;";
                              //"SELECT ROUND(AVG(radiation),3) FROM arduino_schnee GROUP BY id DESC LIMIT 0,49;";
              if ($result mysql_query($query)) {
                  while (
              $row mysql_fetch_row($result))
                      
              $mittelwert_heute=$row[0];}


              $query "SELECT ROUND(AVG(radiation),3) FROM arduino_schnee where datumzeit >= date_sub(now(), interval 8064 hour)";
                      
              //"SELECT ROUND(AVG(radiation),3) FROM arduino_schnee ORDER BY datumzeit DESC LIMIT 0,14;";
                              //"SELECT ROUND(AVG(radiation),3) FROM arduino_schnee GROUP BY id DESC LIMIT 0,49;";
              if ($result mysql_query($query)) {
                  while (
              $row mysql_fetch_row($result))
                      
              $mittelwert_total=$row[0];}


              $query "SELECT ROUND(AVG(radiation),3) FROM arduino_schnee where datumzeit >= date_sub(now(), interval 30 minute)";
                      
              //"SELECT ROUND(AVG(radiation),3) FROM arduino_schnee ORDER BY datumzeit DESC LIMIT 0,14;";
                              //"SELECT ROUND(AVG(radiation),3) FROM arduino_schnee GROUP BY id DESC LIMIT 0,49;";
              if ($result mysql_query($query)) {
                  while (
              $row mysql_fetch_row($result))
                      
              $aktuell=$row[0];}        




              // Grafik generieren
              $graph = new Graph(870,500,"auto");
              $graph->SetScale("datlin",0.080,0.240);     // y-Achse

              // Grafik formatieren
              $graph->SetMargin(60,20,20,80);                 // Rahmen
              $graph->SetShadow();                            // Schatten-Effekt einschalten

              // For background to be gradient, setfill is needed first.
              $graph->ygrid->SetFill(true,'#FFFFFF@0.5','#FFFFFF@0.5');
              //$graph->SetBackgroundGradient('#FF3F00', '#007FFF', GRAD_HOR, BGRAD_PLOT);
              $graph->SetBackgroundImage("radioactivebg3.jpg",BGIMG_FILLFRAME);

              $graph->title->Set("Ortsdosisleistung - Basdorf letzten 24 Stunden");    // Titel der Grafik
              $graph->title->SetFont(FF_FONT2,FS_BOLD);

              $graph->subtitle->Set("Die dargestellte Grafik zeigt die Gamma-Ortsdosisleistung");    // Untertitel
              $graph->subtitle->SetFont(FF_FONT1 ,FS_NORMAL,8);
              $graph->subtitle->SetColor("darkred");

              // Achsen Formatierung
              $graph->xaxis->SetLabelAngle(60);
              $graph->xaxis->SetLabelFormatString('d, M, H:i'true); // d,M / d,m,y / d,m,Y / H:i:s
              $graph->yaxis->title->Set("uSv/h");
              $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
              $graph->yaxis->SetTitleMargin(45);
              // Grid Lines
               
              $graph -> xgrid -> Show(truetrue);

              // Feste Linie

              $lineplot = new LinePlot($radiation$datumzeit);

              $sline  = new plotLine (horizontal, ($mittelwert_heute)+ 0.020 "red",1.7);     // Schwellenwert Linie 0.020uSv/h über Mittelwert
              $graph->AddLine$sline);

              $mline  = new plotLine (horizontal, ($mittelwert_heute) , "green",1.7);     // Mittelwert Linie  
              $graph->AddLine$mline);

              //$mgline  = new plotLine (horizontal, 0.110 , "orange",1.7);     // Mittelwert Linie  
              //$graph->AddLine( $mgline);


              // Graphen generieren


              // Graphen in Grafik einbinden
              $graph->Add($lineplot);

              // 1. Graph
              $lineplot->SetColor("darkblue");
              $lineplot->SetWeight(1);

              // Legende generieren
              $lineplot->SetLegend("Dosis aktuell {$aktuell} uSv/h");
              //$mgline->SetLegend("Jahres Mittelwert {$mittelwert_total} uSv/h");
              $sline->SetLegend('Schwellenwert');
              $mline->SetLegend("Tages Mittelwert {$mittelwert_heute} uSv/h");
              $graph -> legend -> SetFont(FF_FONT1 ,FS_BOLD);
              $graph->legend->SetFrameWeight(1);
              $graph->legend->SetColumns(4);
              $graph->legend->SetColor('#000000','#FFFFFF');
              $graph->legend->Pos(0.5,0.94,"center","right");

              // Grafik anzeigen
              $graph->Stroke();


              ?>

              Kommentar


              • #8
                Schau dir mal das folgende Tutorial an um pdo::query besser zu verstehen.

                Kommentar

                Lädt...
                X