$Query = qq(SELECT * FROM testDB WHERE (FILE_NAME_LONG LIKE '%\_LALBC\_%');
Guest TimoWenn ich mir das Query zurückgeben lasse, welches von DBI "verarbeitet" wurde, dann sehe ich, dass der Backslash nicht berücksichtigt wird und somit der Unterstrich als Wildcard verwendet wird.
Guest TimoWie kann ich die Wildcard '_' richtig maskieren
$dbh->quote($query);
2019-07-11T12:19:51 rostiCode (perl): (dl )$dbh->quote($query);
Quotefür Tabellen und Feldnamen, falls diese escaped werden müssen. Und an diesem Punkt, also wo man diese Funktion explizit aufrufen muss, ist man sehr schnell angelangt ;)quote_identyfier()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
use strict; use warnings; sub insert{ my $self = shift; # Instanz einer beliebigen Klasse my $dbh = shift; # DB Handle my $tabn = shift; # Tabname my %hunt = @_; # field => value my @fields = keys %hunt; $dbh->do(qq( INSERT INTO @{[$dbh->quote_identifier($tabn)]} (@{[join ',', map{$dbh->quote_identifier($_)}@fields]}) VALUES( @{[join ',', map{$dbh->quote($_)}@hunt{@fields}]} ) )); } 1;
1 2 3 4 5 6 7
$self->insert($dbh, "log", url => "$proto$ENV{SERVER_NAME}$self->{URL}", ref => $ref, hugo => $hugo, lang => $self->{LANG}, title => $title );