DBI, mysql Frage

Hallo,

Aus Text-Dateien füge ich den Inhalt in eine mysql DB ein.
alles läuft ganz gut. Aber wenn der Text ein ' enthält (z.B: don't)
beschwert sich mysql. Gibt es dafür eine Funktion, oder was anderes, die
das ' maskiert?


Danke,
Reinhard
Reinhard Pagitsch [ Mo, 10 Juli 2006 09:49 ] [ ID #1386509 ]

Re: DBI, mysql Frage

Reinhard Pagitsch!

> Aus Text-Dateien füge ich den Inhalt in eine mysql DB ein.
> alles läuft ganz gut. Aber wenn der Text ein ' enthält (z.B: don't)
> beschwert sich mysql. Gibt es dafür eine Funktion, oder was anderes, die
> das ' maskiert?

Ich glaube, Du willst Dir ganz dringend mal durchlesen, wie man bei DBI
mit prepared statements arbeitet.


Gruß
Daniel
Daniel Fischer [ Mo, 10 Juli 2006 09:55 ] [ ID #1386510 ]

Re: DBI, mysql Frage

Daniel Fischer wrote:

> Reinhard Pagitsch!
>
>> Aus Text-Dateien füge ich den Inhalt in eine mysql DB ein.
>> alles läuft ganz gut. Aber wenn der Text ein ' enthält (z.B: don't)
>> beschwert sich mysql. Gibt es dafür eine Funktion, oder was anderes, die
>> das ' maskiert?
>
> Ich glaube, Du willst Dir ganz dringend mal durchlesen, wie man bei DBI
> mit prepared statements arbeitet.

Gut, ich habs mir durchgelesen aber ich komm einfach nicht drauf.
Bitte gib mir noch ein Stichwort.

Danke,
Reinhard
Reinhard Pagitsch [ Mo, 10 Juli 2006 10:10 ] [ ID #1386511 ]

Re: DBI, mysql Frage

Reinhard Pagitsch schrieb:
> Daniel Fischer wrote:
>
>> Reinhard Pagitsch!
>>
>>> Aus Text-Dateien füge ich den Inhalt in eine mysql DB ein.
>>> alles läuft ganz gut. Aber wenn der Text ein ' enthält (z.B: don't)
>>> beschwert sich mysql. Gibt es dafür eine Funktion, oder was anderes, die
>>> das ' maskiert?
>> Ich glaube, Du willst Dir ganz dringend mal durchlesen, wie man bei DBI
>> mit prepared statements arbeitet.
>
> Gut, ich habs mir durchgelesen aber ich komm einfach nicht drauf.
> Bitte gib mir noch ein Stichwort.
>

Was verstehst Du denn nicht? Du sollst einfach Deine INSERTs mit einem
prepared statement durchführen, also etwa

my $sth = $dbh->prepare(qq!
INSERT INTO tabelle (bla,text, fasel) values (?,?,?)
!);
$sth->execute(1,$text, 33);

und NICHT
$dbh->do('INSERT INTO tabelle (bla,text,fasel)
values(1,$text,33)');

Und das gilt im übrigen für fast alle Statements. Prepared Statements
können die Performance verbessern, Du musst nicht quoten, und sie
können auch gegen SQL-Injektionen helfen.

Aber all das steht doch auch in der DBI-Dokumentation.
Christian Kirsch [ Mo, 10 Juli 2006 10:30 ] [ ID #1386512 ]

Re: DBI, mysql Frage

Christian Kirsch wrote:

>
> Was verstehst Du denn nicht? Du sollst einfach Deine INSERTs mit einem
> prepared statement durchführen, also etwa
>
> my $sth = $dbh->prepare(qq!
> INSERT INTO tabelle (bla,text, fasel) values (?,?,?)
> !);
> $sth->execute(1,$text, 33);
>
> und NICHT
> $dbh->do('INSERT INTO tabelle (bla,text,fasel)
> values(1,$text,33)');
>
> Und das gilt im übrigen für fast alle Statements. Prepared Statements
> können die Performance verbessern, Du musst nicht quoten, und sie
> können auch gegen SQL-Injektionen helfen.
>
> Aber all das steht doch auch in der DBI-Dokumentation.

Danke, das war es. Ich bin total auf der Leitung gestanden, obwohl ich
mir die Doku durchgelesen habe. Irgendwie habe ich nach den falschen
Sachen gesucht.


regards,
Reinhard
Reinhard Pagitsch [ Mo, 10 Juli 2006 11:28 ] [ ID #1386514 ]

Re: DBI, mysql Frage

Hallo Reinhard,

Reinhard Pagitsch <rprp [at] gmx.net> wrote in
news:e8t0pu$30em$1 [at] geiz-ist-geil.priv.at:

> Hallo,
>
> Aus Text-Dateien füge ich den Inhalt in eine mysql DB ein.
> alles läuft ganz gut. Aber wenn der Text ein ' enthält (z.B: don't)
> beschwert sich mysql. Gibt es dafür eine Funktion, oder was anderes,
> die das ' maskiert?

Gibt's - und zwar: $quoted_string = $dbh->quote($string);

Grüße,

-andi
Andreas Thul [ Di, 11 Juli 2006 21:52 ] [ ID #1388044 ]
Perl » de.comp.lang.perl.misc » DBI, mysql Frage

Vorheriges Thema: Existtenztest auf Coderef
Nächstes Thema: alle backrefs in s//