Fehler in regexp
Maresa P
- perl
Hallo,
ich habe ein Perlscript auf meinem Webspace.
Dieses Script sucht in einer MySQL Datenbank nach überinstimmungen mit einem String, welcher vorher in ein Formularfeld eingegeben wird, mit Inhalten aus einer MySQL Datenbank.
Der "Vergleich" sieht so aus:
[...]
$search=$dbh->quote($search) or die $DBI::errstr;
$cmd="select id,begr from $lang where erkl REGEXP $search or begr REGEXP $search;";
$sth=$dbh->prepare($cmd) or die $DBI::errstr;
$sth->execute or die $DBI::errstr;
[...]
Dies funktioniert auch alles wunderbar, solange ich in das Formularfeld kein + und kein ? eingebe.
Gebe ich eines der Beiden Zeichen ein, bekomme ich folgende Fehlermeldung:
Content-type: text/plain WARN: DBD::mysql::st execute failed: Got error 'repetition-operator operand invalid' from regexp at /pfad/htdocs/cgi-bin/script.cgi line 82. Content-type: text/plain FATAL ERROR: Got error 'repetition-operator operand invalid' from regexp at /pfad/htdocs/cgi-bin/script.cgi on line 82.
Line 82 ist in diesem Fall folgende Zeile:
$sth->execute or die $DBI::errstr;
Frage: Wie kann ich dieses Problem beheben?
Vielen Dank für Euere Hilfe
Maresa P
Hi,
ich nehme stark an, dass + und ? (und bestimmt auch ., *, ...) als Anweisungen für den regulären Ausdruck interpretiert werden => escapen.
Der Yeti
Hi,
Hi Yeti,
ich nehme stark an, dass + und ? (und bestimmt auch ., *, ...) als Anweisungen für den regulären Ausdruck interpretiert werden => escapen.
ja, das nehme ich auch an.
Wie escape ich denn in Perl "automatisch" den String $search?
Der Yeti
Viele Grüße
Maresa
Hi,
ja, das nehme ich auch an.
Wie escape ich denn in Perl "automatisch" den String $search?
Das hier sieht gut aus: http://iis1.cps.unizar.es/Oreilly/perl/cookbook/ch01_14.htm
Der Yeti
Hi,
Hallo Yeti,
ja, das nehme ich auch an.
Wie escape ich denn in Perl "automatisch" den String $search?Das hier sieht gut aus: http://iis1.cps.unizar.es/Oreilly/perl/cookbook/ch01_14.htm
Vielen Dank! Das hat mir weitergeholfen. Ich habe das Problem nun lösen können. Ich escape nun die zu Fehlern führenden Zeichen wie folgt:
$search =~ s/([?+])/\$1/g;
Der Yeti
Viele Grüße
Maresa
Kann es vielleicht sein, dass + und ? als spezielle Befehle interpretiert werden? Versuch doch mal, vor Ausführen der SELECT-Abfrage diesen Zeichen ein \ voranzustellen oder schau mal in der mysql-Hilfe dazu.