Erik: "?" in Query

Hi,
wie kann ich verhindern, dass (in einem Perl-Skript) das Fragezeichen in einem Query als Platzhalter interpretiert wird?
Bsp.:
Viele Grüße
Erik

  1. Hi,
    wie kann ich verhindern, dass (in einem Perl-Skript) das Fragezeichen in einem Query als Platzhalter interpretiert wird?
    Bsp.:

    Hier fehlt das Beispiel... :) Ansonsten kann man nur sagen: "Hängt davon ab..."

    Viele Grüße
    Erik

    - Sven Rautenberg

    1. Hi,
      wie kann ich verhindern, dass (in einem Perl-Skript) das Fragezeichen in einem Query als Platzhalter interpretiert wird?
      Bsp.:

      Hier fehlt das Beispiel... :) Ansonsten kann man nur sagen: "Hängt davon ab..."

      Ups...:
      $query="INSERT test (a, b) VALUES(".param('a').", "bla")";
      Wenn param('a') jetzt ein Fragezeichen entält wird das als Plartzhalter gewertet.

      VG
      Erik

      1. Hi,
        wie kann ich verhindern, dass (in einem Perl-Skript) das Fragezeichen in einem Query als Platzhalter interpretiert wird?
        Bsp.:

        Hier fehlt das Beispiel... :) Ansonsten kann man nur sagen: "Hängt davon ab..."

        Ups...:
        $query="INSERT test (a, b) VALUES(".param('a').", "bla")";
        Wenn param('a') jetzt ein Fragezeichen entält wird das als Plartzhalter gewertet.

        Das ist aber dann eher ein Problem der SQL-Abfragesprache. In so einem Fall mußt du das Fragezeichen escapen, damit es seine Sonderfunktion verliert und als normales Fragezeichen-Zeichen gewertet wird. Wie das geht, steht in der Beschreibung deiner Datenbank drin.

        - Sven Rautenberg

        1. Das ist aber dann eher ein Problem der SQL-Abfragesprache. In so einem Fall mußt du das Fragezeichen escapen, damit es seine Sonderfunktion verliert und als normales Fragezeichen-Zeichen gewertet wird. Wie das geht, steht in der Beschreibung deiner Datenbank drin.

          Hab nix gefunden, eigentlich dürfte das ja auch gar nicht passieren, wenn ich das richtig sehe (BTW das DBMS ist MySQL). Auch "?" wie man vermuten könnte, funktioniert nicht.

          VG
          Erik

          1. Hab nix gefunden, eigentlich dürfte das ja auch gar nicht passieren, wenn ich das richtig sehe (BTW das DBMS ist MySQL). Auch "?" wie man vermuten könnte, funktioniert nicht.

            Eben, normal ist das nicht. Fragezeichen im Insert-Statement sind normalerweise normal. Gewöhnlich sind Platzhalter nur bei "like" von Belang, und da sind es Prozentzeichen.

            Kannst du näher beschreiben, woraus du schließt, warum das Fragezeichen als Platzhalter wirkt?

            - Sven Rautenberg

            1. Hab nix gefunden, eigentlich dürfte das ja auch gar nicht passieren, wenn ich das richtig sehe (BTW das DBMS ist MySQL). Auch "?" wie man vermuten könnte, funktioniert nicht.

              Eben, normal ist das nicht. Fragezeichen im Insert-Statement sind normalerweise normal. Gewöhnlich sind Platzhalter nur bei "like" von Belang, und da sind es Prozentzeichen.

              siehe unten

              Kannst du näher beschreiben, woraus du schließt, warum das Fragezeichen als Platzhalter wirkt?

              Folgendes ist mit Perl/DBI möglich:

              $sth=$dbh->prepare(qq{INSERT test SET test = ?});

              foreach (@a)
              {
              $sth->execute($_);
              }

              Wird nichts übergeben steht an der Stelle des Fragezeichens ein "NULL".

              Ich habe das Problem mittlerweile mit $dbh->quote() gelöst, trotzdem danke für deine Mühe.
              Erik

      2. Hallo,

        Ups...:
        $query="INSERT test (a, b) VALUES(".param('a').", "bla")";
        Wenn param('a') jetzt ein Fragezeichen entält wird das als Plartzhalter gewertet.

        Warum verwendest Du das nicht zu Deinem Vorteil?

        $sth = $dbh->prepare('INSERT test (a, b) VALUES(?,?)');
        $sth->bind_param(1,param('a'));
        $sth->bind_param(2,'bla');

        oder gleich richtig

        use DBI qw(:sql_types);

        $sth = $dbh->prepare('INSERT test (a, b) VALUES(?,?,?)');
        $sth->bind_param(1,param('a'),SQL_VARCHAR);
        $sth->bind_param(2,'bla',SQL_VARCHAR);
        $sth->bind_param(1,param('b'),SQL_INTEGER);

        (Dann sind die SQL-Typen auch gleich mit geklärt.)

        Außer daß Du das Problem 'umgangen' hast, gibt es noch eine Reihe von anderen Vorteilen, wie z.B. daß Du dann auch Texte q{auch mit Quotes (== ') oder Doublequotes (==") } abspeichern kannst, ohne umständlich mit quote() herum zu pfriemeln

        Grüße
          Klaus