MySQL oder TXT

Hallo zusammen. Wußte nicht genau, unter welcher Kategorie ich das Thema posten soll.

Vorweg: Ich greife mit PHP auf eine MySQL Datenbank zu. Der User soll nun die Möglichkeit haben, anhand von verschiedenen Auswahlkreterien auf einen Text zuzugreifen.
Vorstellen kann man sich das in etwa so, als wenn man eine Suche hat, wo der User verschiedene Werte eingibt, wie z. B.:

  • Kategorie: Auto
  • Hersteller: Ford
  • Typ: Focus

    Nach den ganzen Eingaben erhält der User nun einen Text über sein Gesuch.

Jetzt meinen Fragen:

  1. Entscheidung aufgrund der Textlänge:
    Sollte der Text (auch wenn er wirklich lang ist) in die MySQL DB mit hinein oder sollte man eine Textdatei anlegen, die per PHP aufgerufen wird?
  2. Entscheidung aufgrund der Sicherheit:
    Ist es unsicher, eine TXT-Datei zu nehmen? Können Hacker dort besser oder leichter drauf zugreifen?

Zu 1.: Wenn ich in der MySQL DB den Datentyp Text nehme, wie viele Zeichen darf er enthalten? Und wie viele Zeichen können per POST zur DB gesendet werden?

DANKE IM VORAUS!!!

Hallo,

Nach den ganzen Eingaben erhält der User nun einen Text über
sein Gesuch.

Das ist ein klassisches Anwendungsgebiet für eine Datenbank, also nimm eine.

Jetzt meinen Fragen:

  1. Entscheidung aufgrund der Textlänge:
    Sollte der Text (auch wenn er wirklich lang ist) in die MySQL
    DB mit hinein oder sollte man eine Textdatei anlegen, die per
    PHP aufgerufen wird?

Wieso sollte man keine Datenbank nehmen? Was ist „wirklich lang“? Solange der Text nicht mehrere zig oder hundert MB lang ist (bei Text kommt das selten vor) hat mysql damit keine Probleme.

  1. Entscheidung aufgrund der Sicherheit:
    Ist es unsicher, eine TXT-Datei zu nehmen? Können Hacker dort
    besser oder leichter drauf zugreifen?

Es ist ziemlich schwierig, den Umgang mit Dateinamen sicher hinzubekommen, also ist da eine Datenbank sicher besser - vor allem, wenn du mit Platzhaltern arbeitest (und keine Strings in dein SQL reininterpolierst).

Grüße,
Moritz

Zu 1.: Wenn ich in der MySQL DB den Datentyp Text nehme, wie
viele Zeichen darf er enthalten?

Beliebig viele, soweit ich weiss.

Und wie viele Zeichen können
per POST zur DB gesendet werden?

Zur DB gar nicht. Höchsten zum CGI-Script.

Hallo Moritz,

Zu 1.: Wenn ich in der MySQL DB den Datentyp Text nehme, wie
viele Zeichen darf er enthalten?

Beliebig viele, soweit ich weiss.

Schön wärs, aber immer noch genug. Die Maximallänge der verschiedenen Texttypen beträgt:
Tinytext

vor
allem, wenn du mit Platzhaltern arbeitest (und keine Strings
in dein SQL reininterpolierst).

Wie meinst du das? Sind es nicht alles Strings, was an Text gesendet wird oder was soll es sonst sein?

Danke für eure guten Antworten. Habe es als DB angelegt.

Hallo,

vor
allem, wenn du mit Platzhaltern arbeitest (und keine Strings
in dein SQL reininterpolierst).

Wie meinst du das? Sind es nicht alles Strings, was an Text
gesendet wird oder was soll es sonst sein?

Ich kann dir das nur als Perl+DBI-Beispiel zeigen, weil ich kein PHP kann:

# SQL vorbereiten:
my $sth = $dbh-\>prepare('SELECT \* FROM meine\_tabelle WHERE name = ?');

# CGI-Parameter holen:
my $name = param('name');

# Query ausführen:
$sth-\>execute($name);

Dabei wird $name niemals in das SQL übernommen, d.h. es kann beliebige Zeichen enthalten, ohne dass die Gefahr von SQL-Injections besteht.

Für PHP gibts sicher auch Bibliotheken, die sowas können.

Grüße,
Moritz

Du meinst, wenn der User selber Eingaben zur SQL Datenbank schicken kann?

In PHP mache ich das so:

Eingabemaske für den User heisst hier EUser. Mit dem Befel werden ', , \, etc. nicht als SQL Befehle gesendet und Leerzeichen werden auch raus genommen.

$EUser=htmlentities(addslashes($_POST[‚EUser‘]));

Hallo,

Du meinst, wenn der User selber Eingaben zur SQL Datenbank
schicken kann?

Ja.

In PHP mache ich das so:

Eingabemaske für den User heisst hier EUser. Mit dem Befel
werden ', , \, etc. nicht als SQL Befehle gesendet und
Leerzeichen werden auch raus genommen.

$EUser=htmlentities(addslashes($_POST[‚EUser‘]));

Das funktioniert zwar, ist aber nicht das gleiche (und ist auch langsamer).
Im Fall von Platzhaltern werden die Daten separat an die Datenbank übergeben, z.B. Zahlen müssen dafür gar nicht erst in Strings umgewandelt werden.

Außerdem kann man das immer mal wieder vergessen, was die ganzen Sicherheitslücken in wordpress, phpbb und so weiter häufig demonstrieren.

Grüße,
Moritz

Wieso sollte man keine Datenbank nehmen? Was ist „wirklich
lang“? Solange der Text nicht mehrere zig oder hundert MB lang
ist (bei Text kommt das selten vor) hat mysql damit keine
Probleme.

A BLOB or TEXT column with a maximum length of 65535 (2^16 - 1) characters. See Silent column changes. See BLOB.

ergo nichtmal die Bibel passt hinein. find ich nicht lang

longtext/-blob gehen bis 4.294.967.295 zeichen

find ich schon länger ud reicht für 1000 bibeln :smile:

Von 1. Mose 1 bis Offenbarung 22, 21 hat die Bibel:
66 Bücher, 1189 Kapitel, 31.171 Verse, 738.765 Wörter und 4.410.133 Zeichen (Buchstaben mit Leer- und Sonderzeichen).