Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3550[/thread]

$dbh->quote() im Query



<< >> 4 Einträge, 1 Seite
Lameth
 2005-03-23 13:42
#33082 #33082
User since
2005-03-23
2 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen,

ich probiere mit folgendem Konstrukt einen Text in eine Datenbank zu schreiben:
Code: (dl )
$dbh->do("INSERT INTO attacks_desc VALUES('de_04342', $dbh->quote(Der Angreifer konnte die Datei finden.))");

So funktioniert es leider nicht. Als Fehler kommt:
Quote
DBD::mysql::db do failed: You have an error in your SQL syntax near '::db=HASH(0x825543c)->quote(Der Angreifer konnte die Datei finden.))' at line 1 at dbi.pl line 15.


Gibt es eine Möglichkeit das Quoting trotzdem im Query zu machen, oder muß ich tatsächlich so vorgehen?
Code: (dl )
1
2
my $string = $dbh->quote("Ein Benutzer hat entweder versucht 'Anonymous' als Passwort einzugeben, oder auf eine Datei/ein Verzeichnis mit diesem Namen zu zugreifen. Diese Meldung ist unbedenklich");
$dbh->do("INSERT INTO attacks_desc VALUES('de_04400', $string)");


Danke für eure Hilfe.
Viele Grüße

Lameth
ptk
 2005-03-23 13:52
#33083 #33083
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Man benutzt Platzhalter. Siehe "Placeholders and Bind Values" in der DBI-Doku.
Taulmarill
 2005-03-23 14:38
#33084 #33084
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
im grunde genommen hat ptk recht, ich will hier nur etwas ausführlicher werden:

die quote methode von DBI sollte man i.d.r. nicht direkt benutzen, da es eine wesendlich elegantere möglichkeit gibt. versuche folgendes:
Code: (dl )
1
2
3
4
5
$dbh->do(
"INSERT INTO attacks_desc VALUES( 'de_04342', ?)",
undef,
$string
);

mehr über platzhalter kannst du u.a. hier nachlesen.

falls du dich über die fehlermeldung wunderst, so sei noch angemerkt, dass perl wohl variablen in double-quoted strings interpoliert, aber keine objekte. $dbh wird also interpoliert ($dbh ist eine hashreferenz) und der rest dahinter als ganz normaler string behandelt.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Lameth
 2005-03-23 16:49
#33085 #33085
User since
2005-03-23
2 Artikel
BenutzerIn
[default_avatar]
Dank Euch für das Nennen der richtigen Stichworte. Das mit der Interpolation der Objekte war mir neu...

VG

Lameth
<< >> 4 Einträge, 1 Seite



View all threads created 2005-03-23 13:42.