DBI, mysql Frage

DBI, mysql Frage

am 10.07.2006 09:49:17 von Reinhard Pagitsch

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

Re: DBI, mysql Frage

am 10.07.2006 09:55:30 von Daniel Fischer

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

Re: DBI, mysql Frage

am 10.07.2006 10:10:50 von Reinhard Pagitsch

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

Re: DBI, mysql Frage

am 10.07.2006 10:30:59 von Christian Kirsch

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.

Re: DBI, mysql Frage

am 10.07.2006 11:28:48 von Reinhard Pagitsch

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

Re: DBI, mysql Frage

am 11.07.2006 21:52:44 von Andreas Thul

Hallo Reinhard,

Reinhard Pagitsch wrote in
news:e8t0pu$30em$1@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