igor: mehrere Zeilen aufeinmal auslesen

Hallo

ist es möglich mit einer SQL Abfrage mehrere Zeilen einer Tabelle aufeinmal auszulesen

sowas in der Art wie:

SELECT * FROM Crimptab WEHRE ID (1,44,57,34,12)

geht sowas ?

  1. sowas in der Art wie:
    SELECT * FROM Crimptab WEHRE ID (1,44,57,34,12)

    geht sowas ?

    du suchst IN
    SELECT * FROM Crimptab WEHRE ID IN(1,44,57,34,12)

    1. sowas in der Art wie:
      SELECT * FROM Crimptab WEHRE ID (1,44,57,34,12)

      geht sowas ?

      du suchst IN
      SELECT * FROM Crimptab WEHRE ID IN(1,44,57,34,12)

      danke, nur leider klappt es so noch nicht, wenn ich die Fehlermeldung richtig verstehe meckert er an den runden Klammern ?!?

      hier mal die Meldung

      DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 at /srv/www/cgi-bin/TMAG/infocrimp.pl line 58.

      und so schaut das script an der Stelle aus

      Abfrage ( lesen )

      $sql7=qq{select * from Crimptab  WHERE CID IN($qrycrimp)};

      $abfr7=$data2->prepare($sql7);$abfr7->execute;

      while (@ergf = $abfr7->fetchrow_array)
      {
       $count7++;
       @CID[$count7]=$ergf;
      }
      $abfr7->finish;
      $data2->disconnect;

      1. danke, nur leider klappt es so noch nicht, wenn ich die Fehlermeldung richtig verstehe meckert er an den runden Klammern ?!?

        führ das ganze direkt am mysql-server aus, ggf hast du ein php-problem

        SELECT feldname FROM tabellen WHERE feld IN ('1','3','5','7');

        sollte kein problem sein

        1. Hi,

          ggf hast du ein php-problem

          ich glaube nicht, dass in dem Perl-Code ein PHP-Problem vorliegt ;-)

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
          1. ich glaube nicht, dass in dem Perl-Code ein PHP-Problem vorliegt ;-)

            jetzt wo dus sagst :D es ist unwahrscheinlich, aber nicht gänzlich auszuschließen ;)

        2. führ das ganze direkt am mysql-server aus, ggf hast du ein php-problem

          SELECT feldname FROM tabellen WHERE feld IN ('1','3','5','7');

          sollte kein problem sein

          ok, das scheint nun zu klappen, hab die Variable in "" gesetzt.
          nun bekomm ich mal keine Fehlermeldung mehr, aber dummerweise ließt er mir nix aus der Datenbank... da muss ich mal nochmal n bissl schaun

          dankeschön

          1. ok, das scheint nun zu klappen, hab die Variable in "" gesetzt.

            doppelte hochkommas bereiten mysql nicht gerade große freude als stringberenzer ;)

            wenns zahlen sind, sind die stringbegrenzer ansich aber nicht notwendig

          2. echo $begrüßung;

            ok, das scheint nun zu klappen, hab die Variable in "" gesetzt.

            na, offensichtlich nicht, nur hast du jetzt keinen Syntaxfehler mehr.

            nun bekomm ich mal keine Fehlermeldung mehr, aber dummerweise ließt er mir nix aus der Datenbank... da muss ich mal nochmal n bissl schaun

            Deshalb nochmal die schon von Cheatah gestellte und von dir nicht beantwortete Frage: Wie lautet das SQL-Statement? Der Code, der es erzeugt ist erst den zweiten Blick wert. Der erste muss auf eine Kontrollausgabe des erzeugten Statements gerichtet werden, damit du siehst, was dein Code für ein fehlerhaftes Ergebnis erzeugt.

            echo "$verabschiedung $name";

            1. Deshalb nochmal die schon von Cheatah gestellte und von dir nicht beantwortete Frage: Wie lautet das SQL-Statement? Der Code, der es erzeugt ist erst den zweiten Blick wert. Der erste muss auf eine Kontrollausgabe des erzeugten Statements gerichtet werden, damit du siehst, was dein Code für ein fehlerhaftes Ergebnis erzeugt.

              was is denn bitte ein SQL Statement ?
              wenn du mir sagst wie ich das erzeuge was du brauchst dann mach ich das gern :)

              1. echo $begrüßung;

                was is denn bitte ein SQL Statement ?

                Ein SQL-Statement ist das was du dem SQL-Server zur Abarbeitung übergibst, also dein SELECT ...

                wenn du mir sagst wie ich das erzeuge was du brauchst dann mach ich das gern :)

                Du hast es schon erzeugt, nur anscheinend fehlerhaft. Du musst dir nur mal das Ergebnis anzeigen lassen, so wie es aussieht, bevor du es den MySQL-Funktionen übergibst, also den Inhalt der Variablen $sql7 ausgeben.

                echo "$verabschiedung $name";

                1. Du hast es schon erzeugt, nur anscheinend fehlerhaft. Du musst dir nur mal das Ergebnis anzeigen lassen, so wie es aussieht, bevor du es den MySQL-Funktionen übergibst, also den Inhalt der Variablen $sql7 ausgeben.

                  ok, also die Ausgabe von $sql7 ist:
                  select * FROM Crimptab WHERE CID IN ('1404','1410','1411','1412')

                  und es geht nicht.

                  echo "$verabschiedung $name";

                  1. select * FROM Crimptab WHERE CID IN ('1404','1410','1411','1412')
                    und es geht nicht.

                    wenn du exakt dies am sql-server ausführst (per commandline/bash oder wie auch immer), was passiert dann?

                    1. select * FROM Crimptab WHERE CID IN ('1404','1410','1411','1412')
                      und es geht nicht.

                      wenn du exakt dies am sql-server ausführst (per commandline/bash oder wie auch immer), was passiert dann?

                      erschreckenderweise funktionert es da.
                      danke, das hat mir schonmal weitergeholfen, nun muss ich nur noch mein Fehler im script finden...

                  2. echo $begrüßung;

                    ok, also die Ausgabe von $sql7 ist:
                    select * FROM Crimptab WHERE CID IN ('1404','1410','1411','1412')

                    Das passt zwar nicht zu dem in https://forum.selfhtml.org/?t=175383&m=1152696 angegebenen Code, sieht aber soweit fehlerfrei aus.

                    echo "$verabschiedung $name";

      2. Hi,

        SELECT * FROM Crimptab WEHRE ID (1,44,57,34,12)

        selektiere niemals "*", wenn Du nicht weißt, warum Du es nicht tun sollst.

        danke, nur leider klappt es so noch nicht, wenn ich die Fehlermeldung richtig verstehe meckert er an den runden Klammern ?!?

        Wie lautet das tatsächliche Statement?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,

          SELECT * FROM Crimptab WEHRE ID (1,44,57,34,12)

          selektiere niemals "*", wenn Du nicht weißt, warum Du es nicht tun sollst.

          Wie lautet das tatsächliche Statement?

          Cheatah

          aber wenn ich doch alle Daten brauche :) ...

          1. aber wenn ich doch alle Daten brauche :) ...

            wenn du WIRKLICH alle brauchst, dann ist das durchaus berechtigt - das ist aber selten der fall ;)

            aber auch wenn du alle brauchst, solltest du die felder separiert angeben, wenn sich etwas am datenmodell ändert (zb felder dazukommen), kannst du so besser (und performanceschonender) reagieren

            1. aber auch wenn du alle brauchst, solltest du die felder separiert angeben, wenn sich etwas am datenmodell ändert (zb felder dazukommen), kannst du so besser (und performanceschonender) reagieren

              in dem Fall brauch ich echt alle, aber das könnte ich dann nochmal umändern wenn es denn mal auch funktioniert :)
              ich bekomm einfach keine Daten angezeigt die ich aus der DB ziehe.

              findest du nen Fehler ?

              $data1 = "DBI:mysql:stecker";
              $data2 = DBI->connect("$data1", "$username", "$pw", { RaiseError => 1 }) || die("Kann DB nicht öffnen!");

              Abfrage ( lesen )

              $sql7=qq{select * from Crimptab  WHERE CID IN ('1409,1411,1412') };

              $abfr7=$data2->prepare($sql7);$abfr7->execute;

              while (@ergf = $abfr7->fetchrow_array)
              {
               $count7++;
               @CID[$count7]=$ergf;
              }
              $abfr7->finish;
              $data2->disconnect;

              print "@CID\n"; #das array CID sollte eigentlich in HTML ausgegeben werden aber es ist leer :-(

              1. Moin Moin!

                $sql7=qq{select * from Crimptab  WHERE CID IN ('1409,1411,1412') };

                $abfr7=$data2->prepare($sql7);$abfr7->execute;

                Schlechte Idee. Insbesondere, wenn die Zahlen nicht fest im Script stehen, sondern von außen kommen, baust Du hier eine SQL Injection. Außerdem sabotierst Du jeden Ansatz, geparste Statements zu cachen. Benutze Platzhalter und übergib die konkreten Werte an Execute.

                Zu "select *" hat Cheatah schon fast genug gesagt. Das Du Dich hier auch noch darauf verlässt, dass die Daten in einer festen Reihenfolge aus der DB kommen (fetchrow_array()), ist extrem gefährlich. Wenn schon "select *", dann fetchrow_hashref() und anschließend den Hash kopieren.

                Von den wirren Variablennamen und unnützen Interpolationen will ich jetzt gar nicht anfangen.

                Alexander

                --
                Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
                1. Schlechte Idee. Insbesondere, wenn die Zahlen nicht fest im Script stehen, sondern von außen kommen, baust Du hier eine SQL Injection. Außerdem sabotierst Du jeden Ansatz, geparste Statements zu cachen. Benutze Platzhalter und übergib die konkreten Werte an Execute.

                  ok, wo gehts zum nächsten Chinesischkurs ? :-)

                  Von den wirren Variablennamen und unnützen Interpolationen will ich jetzt gar nicht anfangen.

                  ich halt ne sehr kreative Ader ;-)

                  Alexander

                  1. Moin Moin!

                    Schlechte Idee. Insbesondere, wenn die Zahlen nicht fest im Script stehen, sondern von außen kommen, baust Du hier eine SQL Injection. Außerdem sabotierst Du jeden Ansatz, geparste Statements zu cachen. Benutze Platzhalter und übergib die konkreten Werte an Execute.

                    ok, wo gehts zum nächsten Chinesischkurs ? :-)

                    Bei CPAN und bei der Wikipedia.

                    Von den wirren Variablennamen und unnützen Interpolationen will ich jetzt gar nicht anfangen.

                    ich halt ne sehr kreative Ader ;-)

                    Leb die besser woanders aus, in dem Zustand möchte ich den Code nicht warten müssen. Und in drei Monaten willst Du es auch nicht mehr.

                    Alexander

                    --
                    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
              2. Hi,

                $sql7=qq{select * from Crimptab  WHERE CID IN ('1409,1411,1412') };

                Wenn Du so wie hier nur einen Wert (den String '1409,1411,1412') hast, brauchst Du kein IN, da kannst Du direkt mit CID = '1409,1411,1412' abfragen.

                cu,
                Andreas

                --
                Warum nennt sich Andreas hier MudGuard?
                O o ostern ...
                Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          2. SELECT * FROM Crimptab WEHRE ID (1,44,57,34,12)
            selektiere niemals "*", wenn Du nicht weißt, warum Du es nicht tun sollst.
            aber wenn ich doch alle Daten brauche :) ...

            Also, ich kann mir ja nur die Namen der Spalten merken, nicht die Reihenfolge. ;-)

            --
            Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
            Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|