Gustl: MySQL und Perl

weiss schon bin spät dran mit SQL lernen ... bisher haben .dat und .csv fürs web gereicht. wer hilft mir bitte über die ersten hürden ? mir brummt schon der kopf vor lesen. ich bin was DB angeht BDE vorbelastet, und denke schon eine vernünftige struktur hinzukriegen. als test hab ich mir mal eine auf dem webserver angelegt und kann diese in perl öffnen und schliessen :) dazu gabs auch genügend zu lesen. soweit step1. viele behaupten sql wäre ganz einfach. mir kommt das gar nicht so vor :(

ich will es mal so zusammenfassen:

step2: daten abfragen, ändern, zurückschreiben, neue datensätze anlegen, locks ?, fortlaufende id-nummern ?

step3: daten sortieren, teilmengen, index ?, joins ?

wer hilft mir gehen lernen ? das laufen lern ich mir dann selbst.

Grüsse Gustl

  1. gudn tach!

    wer hilft mir bitte über die ersten hürden ?

    die wikipedia und deren links?
    http://de.wikipedia.org/wiki/SQL

    prost
    seth

    1. die wikipedia und deren links?
      http://de.wikipedia.org/wiki/SQL

      jaja, seth, alles sprachreferenz. ich sprach von gehübungen, die unter der grasnabe :) wo steht: wie mach ichs in perl ???

      mit: SELECT "Spalten_Name" FROM "Tabellen_Name" passiert schliesslich nichts.

      1. gudn tach!

        jaja, seth, alles sprachreferenz. ich sprach von gehübungen

        boah, das musste ich jetzt 4 mal lesen, bis ich gecheckt hab, dass es nicht um ge-huebungen geht, von denen ich auch gar nicht wuesste, was es sein soll, hihi.

        , die unter der grasnabe :) wo steht: wie mach ichs in perl ???

        ach so, ich dachte, dass sql das problem sei, nicht perl. weil bei perl muss man ja auch mehr sagen, als "mach(sql-kram)". ok, fuer perl sollte erstmal http://search.cpan.org/~timb/DBI-1.53/DBI.pm helfen.

        prost
        seth

        1. Jesus Maria, dann bis morgen. Immerhin konnte ich schon mal meine Testtabelle abdrucken, die ich mir in phpmyadmin angelegt habe. Durch mein "heva little botkrueml in my link manteltaesch" - englisch tu ich mir halt hart.

          Schlafen geht, Gut Nacht.

          1. gudn tach!

            Jesus Maria

            ich bezweifle, dass die da helfen koennen. die konnten weder sql noch englisch, geschweige denn perl.

            Durch mein "heva little botkrueml in my link manteltaesch" - englisch tu ich mir halt hart.

            auf http://de.wikipedia.org/wiki/Perl-DBI wird ein deutsches buch empfohlen, das du dir ja evtl. irgendwo ausleihen/kaufen kannst. schlecht ist es bestimmt nicht.
            ansonsten hast du jetzt auch genuegend begriffe um bei google (auf deutsch) zu suchen: http://www.google.de/search?hl=de&q=perl+dbi&meta=lr%3Dlang_de

            prost
            seth

          2. Hell-O!

            Durch mein "heva little botkrueml in my link manteltaesch" - englisch tu ich mir halt hart.

            Versuche es mal bei Thomas Fahle. Das hat mich auch gehelft ;)

            Siechfred

            --
            Ich bin strenggenommen auch nur interessierter Laie. (molily)
            Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
            1. Moin !

              Ohh, Cpan;DBI auf Deutsch ... das wird wohl helfen, Siechfred.

              Und ja, ich hab bei Google immer nach Perl+SQL gesucht, nicht nach Perl und DBI: dazu muss man zuerst mal wissen, wonach man suchen soll, seth: respektive Geh-Übungen ... ok ?

              So gesagt hats geholfen.

              Ich werds heute mal durchackern, wahrscheinlich 97% Zeugs lesen das ich nicht brauche, sodass ich für die restlichen 3% die ich brauch nicht mehr aufnahmefähig bin :( . Geht mir doch immer so, und wahrscheinlich geht es vielen anderen wohl ebenso. Einfacher wärs, wenn man die 3% hier im Forum ausdiskutieren könnte, das ist immer meine Hoffnung. So, das musste ich mal loswerden.

              Danksagung: Trotz allem habt Ihr mir bisher immer weitergeholfen, Siechfred, Struppi, seth usw. Danke dafür ! Ich weiss gar nicht, was ich ohne Euch machen würde. Auch das musste mal raus.

              Grüsse Gustl

              1. Ich werds heute mal durchackern, wahrscheinlich 97% Zeugs lesen das ich nicht brauche, sodass ich für die restlichen 3% die ich brauch nicht mehr aufnahmefähig bin :( . Geht mir doch immer so, und wahrscheinlich geht es vielen anderen wohl ebenso. Einfacher wärs, wenn man die 3% hier im Forum ausdiskutieren könnte, das ist immer meine Hoffnung. So, das musste ich mal loswerden.

                Es ist bei so einem Thema schwer möglich die 3% zu finden, die du brauchst.
                Aber es stimmt schon die DBI Doku ist gewaltig, es hilft evtl. aber sich erstmal Tutorials zu suchen, die zumindest den Einstieg erleichtern.
                Das Problem dabei ist, sql <-> Perl ist so vielschichtig und mit vielen Gefahrenquellen verbunden (z.b. SQL Injection), dass es gut ist, die Doku zu kennen und auch schon mal gelesen zu haben, da sie schon auf viele Fragen eingeht und viele Tipps liefert.

                Danksagung: Trotz allem habt Ihr mir bisher immer weitergeholfen, Siechfred, Struppi, seth usw. Danke dafür ! Ich weiss gar nicht, was ich ohne Euch machen würde. Auch das musste mal raus.

                Jo, Danke immer wieder gerne.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
              2. Hell-O!

                Und ja, ich hab bei Google immer nach Perl+SQL gesucht, nicht nach Perl und DBI: dazu muss man zuerst mal wissen, wonach man suchen soll

                Kleiner Tipp: SELFHTML bietet u.a. eine Linksammlung deutschsprachiger Seiten zu Perl, dort ist Herr Fahle auch verewigt :)

                Siechfred

                --
                Ich bin strenggenommen auch nur interessierter Laie. (molily)
                Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
            2. Jetzt gehts schon los. Die leichteste Aufgabe und schon scheiterts. So ists beschrieben aber ändern tut sich nix. Es gibt sowohl die tabelle fixdaten sowie ein feld vorname sowie einen datensatz kdnr mit wert 100. Gibts da nen Schreibschutz oder so ? Oder stimmt die Syntax nicht ?

              Gustl

              $dbh = DBI->connect("DBI:mysql:base", "a@b", 'aha') or die "Fehler bei Datenbankverbindung: $!";  
                
              $abfrage=$dbh->prepare('SELECT * FROM stammdaten'); $abfrage->execute; @ergebnis = $abfrage->fetchrow_array; $abfrage->finish;  
                
              if ($go eq 1)  
              {  
                $upd=$dbh->prepare('UPDATE fixdaten SET vorname=\'Hans\', WHERE kdnr = \'100\''); $upd->execute; $upd->finish;  
              }  
                
              $dbh->disconnect;
              
              1. Jetzt gehts schon los. Die leichteste Aufgabe und schon scheiterts. So ists beschrieben aber ändern tut sich nix. Es gibt sowohl die tabelle fixdaten sowie ein feld vorname sowie einen datensatz kdnr mit wert 100. Gibts da nen Schreibschutz oder so ? Oder stimmt die Syntax nicht ?

                Als allererstes, mach dein Programm sauber, verwende use strict und use warnings, wenn du ein Konsolenprogramm schreibst und zusätzlich use CGI::Carp qw/fatalsToBrowser warningsToBrowser/ wenn's ein CGI ist.

                Dann bekommst du schon die Fehler angezeigt die in dem Code sind und mit use strict vermeidest du viele Fehler die du noch machen wirst.

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. Danke, Struppi, werd ich machen. Das komma ists übrigens gewesen. Ich brauch ne Pause, ich kanns nicht erzwingen, bin im Moment zu verbissen ...

                  Gustl

              2. Hell-O!

                Jetzt gehts schon los. Die leichteste Aufgabe und schon scheiterts. So ists beschrieben aber ändern tut sich nix. Es gibt sowohl die tabelle fixdaten sowie ein feld vorname sowie einen datensatz kdnr mit wert 100. Gibts da nen Schreibschutz oder so ? Oder stimmt die Syntax nicht ?

                Oberste Regel bei DBI: Frage mögliche Fehlermeldungen des Treibers ab:

                $dbh = DBI->connect("DBI:mysql:base", "a@b", 'aha') || die $DBI::errstr;

                (und das für jeden Methodenaufruf des Datenbankhandle-Objekts)

                Siechfred

                --
                Ich bin strenggenommen auch nur interessierter Laie. (molily)
                Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
                1. Hab ich gemacht. Hab nun nen fetten Quellcode für fast nix, wenn ich doch ein Schlankheitsfanatiker bin. :(

                  Nur eins bring ich nicht weg:

                  Software error:
                  Global symbol "@localhost" requires explicit package name at testosteron.pl line 14.
                  Execution of testosteron.pl aborted due to compilation errors.

                  Kommt von: my $DB_USER="mybase@localhost";

                  1. Software error:
                    Global symbol "@localhost" requires explicit package name at testosteron.pl line 14.
                    Execution of testosteron.pl aborted due to compilation errors.

                    Kommt von: my $DB_USER="mybase@localhost";

                    Du solltest keine Doublequotes verwenden, wenn der Inhalt keine zu ersetzenden Variablen enthält. Alternativ maskiere das '@' mit einem Backslash.

                    Siechfred

                    --
                    Ich bin strenggenommen auch nur interessierter Laie. (molily)
                    Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
                    1. Schon versucht, dann macht er mir die db nicht mehr auf. (das sieht man ohne use strict)

                      Versucht:

                      my $DB_USER="mybase@localhost"; Fehler: explicit package name ...

                      my $DB_USER='mybase@localhost'; Fehler: Undefined subroutine &main::param called ...

                      my $DB_USER="mybase@localhost"; Fehler: Undefined subroutine &main::param called ...

                      my $DB_USER='mybase@localhost'; Fehler: Undefined subroutine &main::param called ...

                      alle in der selben zeile

                      1. Schon versucht, dann macht er mir die db nicht mehr auf. (das sieht man ohne use strict)

                        Weil das Script mit diesem Fehler stirbt:

                        [...] Fehler: Undefined subroutine &main::param called ...

                        der bedeutet, dass du param (höchstvermutlich aus dem CGI-Modul) nutzt, ohne diese Methode einzubinden. Der Fehler hat übrigens nichts mit DBI.pm zu tun.

                        Siechfred

                        --
                        Ich bin strenggenommen auch nur interessierter Laie. (molily)
                        Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
                        1. Was zum kuckuck ist eine methode ? ok, Tilt, Ende: Ich hab sieben Jahre lang nur Scheisse programmiert. Ich hab sieben Jahre weggeworfen. Ich hab über 1500 CGI´s programmiert, die alle seit Jahren fehlerfrei laufen, das ist kein Witz. Ich bin bisher ohne "methode" wie man das wort auch immer übersetzten mag klargekommen. Ich werde 2 Leben brauchen um 10 Prozent davon zu lernen, das ist mir use strict; :) nicht wert.

                          Dank für alles: Gustl

                          1. Was zum kuckuck ist eine methode ? ok, Tilt, Ende: Ich hab sieben Jahre lang nur Scheisse programmiert. Ich hab sieben Jahre weggeworfen. Ich hab über 1500 CGI´s programmiert, die alle seit Jahren fehlerfrei laufen, das ist kein Witz. Ich bin bisher ohne "methode" wie man das wort auch immer übersetzten mag klargekommen. Ich werde 2 Leben brauchen um 10 Prozent davon zu lernen, das ist mir use strict; :) nicht wert.

                            Eine Methode ist ein Funktion oder ein sub eines Pakets, falls du bisher tatsächlich ohne irgendeine Funkltion ausgekommen bist, dann hast du recht.

                            Evtl. solltest du dir auch nochmal die Doku zum CGI Modul (ist auch sehr fett und gibt's sicher auch irgendwo in deutsch) anschauen.

                            Struppi.

                            --
                            Javascript ist toll (Perl auch!)
                            1. Ok, struppi, mit mir stimmt heute was nicht, ich führ mich hier auf wie ein esel. hab nen heissen kopf, trockenen mund etc, schwindelgefühl. vermutlich hohes fieber, ich kann absolut nicht mehr 2+2 zusammenzählen. ich muss ins bett. melde mich wenn ich wieder gesund bin, hoffe ihr seid nicht sauer, und wenn doch bitte entschuldigung.

                              Gustl

                          2. Hell-O!

                            Was zum kuckuck ist eine methode ?

                            Lies hierzu die Erklärung in der Wikipedia. Wäre Auto ein Objekt, so wäre starten eine Methode des Objektes Auto. Genauso ist es mit CGI.pm, das dir ein Objekt zur Verfügung stellt:

                            use CGI;  
                            my $cgi = CGI->new;
                            

                            Nun hast du via $cgi Zugriff auf alle Methoden des CGI-Objektes, also alle Funktionen, die dir CGI.pm bietet. Und $cgi->param ist eine solche Methode. Dies ist die objektorientierte Variante.

                            Alternativ kannst du die funktionsorientierte Variante benutzen. Dazu musst du beim Einbinden des CGI-Moduls festlegen, welche Methode(n) in dein Script importiert werden sollen. Ein paar Beispiele:

                            use CGI qw/:cgi/; # CGI.pm mit den Funktionen für die CGI-Programmierung  
                            use CGI qw/param/; # CGI.pm mit der Funktion 'param'
                            

                            Die importierten Funktionen (z.B. param) kannst du dann innerhalb deines Scriptes so aufrufen, als wären es Standard-Perlbefehle.

                            Ich bin bisher ohne "methode" wie man das wort auch immer übersetzten mag klargekommen.

                            Nein bist du nicht, du hast vermutlich bisher nur nicht gewusst, dass du eine Methode einsetzt :)

                            Ich werde 2 Leben brauchen um 10 Prozent davon zu lernen, das ist mir use strict; :) nicht wert.

                            Mit "use strict" hat das Ganze nichts zu tun, deine Fehlermeldungen würdest du auch ohne dieses erhalten haben :)

                            Siechfred

                            --
                            Ich bin strenggenommen auch nur interessierter Laie. (molily)
                            Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
        2. gudn tach!

          ach so, ich dachte, dass sql das problem sei, nicht perl. weil bei perl muss man ja auch

          kaum

          mehr sagen, als "mach(sql-kram)".

          ...wollte ich sagen.

          prost
          seth