Schrift
[thread]6667[/thread]

SQL-Insert Fehler wegen Hochkommas



<< >> 6 Einträge, 1 Seite
mari
 2005-01-27 09:47
#51349 #51349
User since
2005-01-07
9 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich versuche aus einer Logzeile ausgelesenen Daten in die Mysql Datenbank zu schreiben.

Der Code ist:
Code: (dl )
1
2
3
4
5
my $Q="INSERT INTO logs VALUES (\" \", \"$typ\", \"$time\", \"$date\", \"$severity\", \"$action\",\"$ip\", \"$line\")";

my $sth=$dbh->prepare($Q)||die "Cant prepare statement: $DBI::errstr";

my $rv=$sth->execute() || die "Can't execute statement: $DBI::errstr";


Das Problem ist wenn einer diesen Daten Hochkommas haben z.B. "deny" oder 'router' stürzt das Programm ab.

Was soll ich machen, damit die Hochkommas beim SQL-Statement keinen Fehler verursachen??

Danke im Voraus

edit renee: ne Runde [code]-Tags spendiert
Bearbeitet von Crian: Renees Eintrag repariert =)\n\n

<!--EDIT|Crian|1106824549-->
renee
 2005-01-27 10:09
#51350 #51350
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mach mal:
Code: (dl )
1
2
3
4
5
my $Q="INSERT INTO logs VALUES ('', ?, ?, ?, ?, ?, ?, ?)";

my $sth=$dbh->prepare($Q)||die "Cant prepare statement: $DBI::errstr";

my $rv=$sth->execute($typ,$time,$date,$severity,$action,$ip,$line) || die "Can't execute statement: $DBI::errstr";


Durch die ?-Notation werden die Werte der Variablen automatisch gequotet. Wenn Du Deinen Code verwenden will, dann ersetze jedes \" durch '.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
mari
 2005-01-27 10:18
#51351 #51351
User since
2005-01-07
9 Artikel
BenutzerIn
[default_avatar]
Es hat geklappt!
vielen Dank renee
mari
 2005-01-27 10:29
#51352 #51352
User since
2005-01-07
9 Artikel
BenutzerIn
[default_avatar]
Hallo renee,

kann ich diese Lösung auch bei Select anwenden?

my $sql5="select date, description, line from logs where description=? and date=?";
my $sth5 = $dbh->prepare($sql5);
my $anz=$sth5->execute($description, $date);
renee
 2005-01-27 10:31
#51353 #51353
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ja!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2005-01-27 11:49
#51354 #51354
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Bei meinem Projekt mit DBI werde ich bestimmt SQL::Interpolate verwenden. Dort wuerde man das so schreiben:
Code: (dl )
1
2
3
4
5
use SQL::Interpolate qw(sql_interp);
my($sql, @bind) = sql_interp q{INSERT INTO logs},
["", $typ, $time, $date, $severity, $action, $ip, $line];
$dbh->prepare($sql);
$dbh->execute(@bind);

SQL::Interpolate spielt seine richtigen Staerken aus, wenn man sein SQL zusammenbauen will, also z.B. eine SELECT-Abfrage mit einer variablen Anzahl von mit AND/OR zusammengefuegten Ausdruecke n hat.
<< >> 6 Einträge, 1 Seite



View all threads created 2005-01-27 09:47.