marko: perl und mysql: email-adresse in abfrage

Hi Leute,

ehe ichs noch länger versuche frag ich mal. Ich habe ne email adresse in einer mysql db-spalte und versuche per perl script werte anhand diser abzufragen. Ich krieg das aber mit dem quoten grad nicht hin, entweder perl schmeißt fehler oder entfernt das "@" aus der abfrage, weil er denkt es sei eine tabelle o.ä. bsp:

$test = "bla@bla.de";

...

$sql = "select blu from blo where email=".$test;
        my $sth1 = $dbh1->prepare($sql);
        $sth1->execute($sender2);

DBD::mysql::st execute failed: called with 1 bind variables when 0 are needed at

wie macht man das richtig ?

danke, Marko

  1. Hi,

    Ich krieg das aber mit dem quoten grad nicht hin,

    wenn Du einen Wert in einen Kontext bringst, kodiere den Wert kontextspezifisch. That's it.

    $sql = "select blu from blo where email=".$test;

    Erstens: Wie muss das _SQL_-Statement lauten?
    Zweitens und *erst* zweitens: Wie muss der Perl-Code dazu lauten?

    wie macht man das richtig ?

    Wenn Du einen Wert in einen Kontext bringst, kodiere den Wert kontextspezifisch.

    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,

      Ich krieg das aber mit dem quoten grad nicht hin,

      wenn Du einen Wert in einen Kontext bringst, kodiere den Wert kontextspezifisch. That's it.

      Das ist mir klar, allerdings nimmt mir perl immer den Klammeraffen und das daruf folgende weg, weiteres Beispiel:

      $test = "bla.blo@blu.de";
      my $dbh1 = DBI->connect($dsn, $db_user_name, $db_password) || die ("Eine Datenbankverbindung konnte nicht hergestellt werden");
      my $sth1 = $dbh1->prepare("select typ from test where email=?");
              $sth1->execute($test);

      Die Abfrage kommt in mysql folgendermaßen an (mysql.log):

      select typ from test where email='bla.blo.de'

      Entweder es kommt durch das prepared statement oder perl schneidet es immer weg. Das Problem ist anscheinend der Klammeraffe. Ich muß es anscheinend anders kodieren als sont, mit Variablen ohne ein "@" gibt es ja keine Probleme,

      gruß, marko

      1. Hallo Marko,

        setze ein Backslash vor den Klammeraffen, so sollte es gehen.

        Gruss city

        1. setze ein Backslash vor den Klammeraffen, so sollte es gehen.

          oder noch besser einfache Anführungszeichen verwenden.

          Struppi.

          --
          Javascript ist toll (Perl auch!)
      2. Hi,

        wenn Du einen Wert in einen Kontext bringst, kodiere den Wert kontextspezifisch. That's it.
        Das ist mir klar, allerdings nimmt mir perl immer den Klammeraffen und das daruf folgende weg, weiteres Beispiel:
        $test = "bla.blo@blu.de";

        wenn Dir das klar ist, wieso hast Du dann die E-Mail-Adresse nicht kontextspezifisch kodiert, als Du sie in den Kontext eines Doublequote-Perl-Strings gebracht hast? Bei obigem Code ersetzt Perl "@blu" durch durch die String-Repräsentation des Arrays @blu. Siehe auch

        perldoc perlvar, $LIST_SEPARATOR ($")

        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,

          wenn Du einen Wert in einen Kontext bringst, kodiere den Wert kontextspezifisch. That's it.
          Das ist mir klar, allerdings nimmt mir perl immer den Klammeraffen und das daruf folgende weg, weiteres Beispiel:
          $test = "bla.blo@blu.de";

          wenn Dir das klar ist, wieso hast Du dann die E-Mail-Adresse nicht kontextspezifisch kodiert, als Du sie in den Kontext eines Doublequote-Perl-Strings gebracht hast? Bei obigem Code ersetzt Perl "@blu" durch durch die String-Repräsentation des Arrays @blu. Siehe auch

          perldoc perlvar, $LIST_SEPARATOR ($")

          Cheatah

          Hi, völlig richtig, Asche auf mein Haupt. Ich war auf einem ganz falschen Dampfer ...

          Danke, Marko

      3. Hi,

        Das ist mir klar, allerdings nimmt mir perl immer den Klammeraffen und das daruf folgende weg, weiteres Beispiel:

        Würdest Du

        use strict;
        use warnings;

        verwenden, würde Dir der Perl-Interpreter sagen, was hier

        $test = "bla.blo@blu.de";

        falsch ist.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        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.
        1. use warnings;

          Statt dessen sollte man in der Entwicklungsphase besser use diagnostics verwenden, denn dann gibt's zur Warnung gleich noch eine Erklärung, wie man sie selber nicht besser schreiben könnte.

          Siechfred

          --
          Ich bin strenggenommen auch nur interessierter Laie. (molily)
  2. $sql = "select blu from blo where email=".$test;
            my $sth1 = $dbh1->prepare($sql);
            $sth1->execute($sender2);

    DBD::mysql::st execute failed: called with 1 bind variables when 0 are needed at

    wie macht man das richtig ?

    RTFM   ;)

    Tipp:Es gibt da irgendeinen Joker, den man einbauen muss. Du hast ja ein bind() mit einem Parameter, der will irgenwo rein (vielleicht in die WHERE-Klausel?).