ChrisB: Problem mit franz. Apostroph beim Importieren in DB

Beitrag lesen

Hi,

Ich dachte, das sei einer der Gründe, warum Du PDO mit prepared Statements nutzt (ist nämlich ein netter Nebeneffekt, den man gerne mitnimmt).

Ähm, ich verstehe nicht genau was du meinst. Ich hatte PDO gewählt um möglichst flexibel zu sein, was die DB betrifft. (Auch wenn es später vielleicht nur bei Postgres bleibt)
Prepared Statements waren und sind auch ein Grund wegen Sicherheit und SQL Injection.

In diesem Zusammenhand aber mit dem Hochkomma ist mir nicht klar wie du das meinst.

Ganz einfach - wenn du prepared statements nutzt, musst du dich gar nicht um die Behandlung der Daten kümmern, Maskierungen für Sonderzeichen sind dabei nicht erforderlich.

In einer „normalen“ Query müssen die Sonderzeichen aus genau dem Grund behandelt werden, damit der Query-Parser das Statement nach den vorliegenden Syntax-Regeln analysieren kann - weil hier „Befehl“ und Daten in einem Textstring „gemischt“ auftreten.

Bei prepared statements werden aber das Statement und die Daten separat an die Datenbank übergeben - d.h., eine „Verwechslung“ von Befehls-Bestandteilen und Daten kann hier gar nicht passieren, vollkommen egal, was für Zeichen die Daten enthalten.

Es ist ja so, dass ich mit PHP ein Import SQL Script erstelle, das man dann später z.b. PGAdmin III importieren kann.

In so einem Fall musst du natürlich die Daten entsprechend behandeln, in reinem SQL in Textform kannst du keine prepared statements nutzen.

Oder meinst du das Problem wäre nicht aufgetreten, wenn ich anstatt den Import mit PGAdmin III zu machen, dies über ein eigenes Import Script mittels PDO gemacht hätte?

Wenn du dabei prepared statements genutzt hättest, dann nein.

Aber für größere Datenmengen kann natürlich eine Textdatei, die reine SQL-Statements enthält und von der Datenbank bzw. über ein Frontend direkt importiert werden kann, von der Performance her günstiger sein als ein Script, welches selber mit der Datenbank kommuniziert.

MfG ChrisB

--

RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?