perl und mysql: email-adresse in abfrage
marko
- perl
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
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
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
Hallo Marko,
setze ein Backslash vor den Klammeraffen, so sollte es gehen.
Gruss city
setze ein Backslash vor den Klammeraffen, so sollte es gehen.
oder noch besser einfache Anführungszeichen verwenden.
Struppi.
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,
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
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
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
$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?).