Toon posts:

[perl/xml] Quote Probleem

Pagina: 1
Acties:
  • 109 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik probeer een XML via perl naar SQL te conveteren.
Het is een best grote xml file met verschillende subsecties.

Alles gaat goed totdat ik bij
$item = $ref->{Products}->{Comments};
kom.

Hier staat comment in geschreven met bijvoorbeeld " the file's"
waardoor mijn sql insert statement door die 's de fout ingaat.

$dbi->execute("insert tabel(Comment) value('$item')");

Is het verstandig om een replace functie te gaan doen, die alle qoutes weghaald.
Of zijn er andere manieren in perl?

Verwijderd

Ik heb nog niet met Perl en XML gewerkt, maar heb wel wat ervaring met Perl in combinatie met SQL. En in het geval van quotes en dergelijke, is het niet zo dat je per sé alles moet escapen ofzo.

Als ik het me goed herinner:

Als je een SQL-statement gaat uitvoeren, en je gebruikt eerst prepare() (ofzo.., effe zoeken) en placeholders, dus een ? i.p.v. de inhoud, dan wordt alles automatisch "ge-escaped".

Ik zal nog ff zoeken, post straks nog een keer.

Als ik het niet vergeet, ;)

Peter

EDIT:

Kijk eens, de exacte site die ik gebruikt heb: http://www.hk8.org/old_web/linux/dbi/ch05_03.htm

Nog even voor de duidelijkheid:
"You may have noticed that we haven't called the quote( ) method on the values. Bind values are passed to the database separately from the SQL statement,[50] so there's no need to "wrap up" the value in SQL quoting rules."

Ik hoop dat ik je niet verkeerd begrijp, en dat dit je probleem oplost...

In ieder geval succes!

Peter

[ Voor 34% gewijzigd door Verwijderd op 02-11-2004 17:57 . Reden: Meer informatie ]


Verwijderd

Topicstarter
Dank je Peter.

Ik had zelf een quick en dirty fix gemaakt.
$item =~ s/\'/"/g;

Dit replaced de ' met ".
Ik zal even kijken of het ook via de url manier kan.

c4

Verwijderd

Ik neem aan dat je de DBI module voor Perl gebruikt.

$dbh-> quote($blaat)

voorbeeldje
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/perl -w
#
# ch04/util/quote1: Demonstrates the use of the $dbh->quote() method
 
use DBI;
 
### The string to quote
my $string = "Don't view in monochrome (it looks 'fuzzy')!";
 
### Connect to the database
my $dbh = DBI->connect( "dbi:Oracle:archaeo", "username", "password" , {
    RaiseError => 1
} );
 
### Escape the string quotes ...
my $quotedString = $dbh->quote( $string );
 
### Use quoted string as a string literal in a SQL statement
my $sth = $dbh->prepare( "
    SELECT *
    FROM media
    WHERE description = $quotedString
  " );
$sth->execute();
 
exit;

Verwijderd

@zzzflitzzz:

Ja, alleen nam ik niet de moeite om code te typen of kopiëren ;). Die URL, http://www.hk8.org/old_web/linux/dbi/ch05_03.htm, verwijst naar "Programming the Perl DBI"

@c4:

Ik neem aan dat hiermee je probleem is opgelost?

Verwijderd

Topicstarter
Verwijderd schreef op 02 november 2004 @ 22:54:


@c4:

Ik neem aan dat hiermee je probleem is opgelost?
Ja, het is opgelost.
Bedankt!

Verwijderd

Verwijderd schreef op 02 november 2004 @ 22:54:
@zzzflitzzz:

Ja, alleen nam ik niet de moeite om code te typen of kopiëren ;). Die URL, http://www.hk8.org/old_web/linux/dbi/ch05_03.htm, verwijst naar "Programming the Perl DBI"
IDD, altijd makkelijk zo'n bookshelf link :)
Pagina: 1