Hi!
Sollte ich auch die Tabellen- und Spaltennamen mit mysqli::real_escape_string(...) escapen bzw. bringt mir das was?
Wie lauten die Regeln zur Notation von Tabellen- und Spaltennamen? Welche Zeichen haben darin eine Sonderbedeutung und welche Zeichen werden von mysqli_real_escape_string() behandelt?
Kann ich mich mit dieser Funktion auch vor SQL-Injections schützen oder benötige ich da noch eine andere Funktion für?
Sich um SQL-Injection zu sorgen zäumt das Pferd von hinten auf. Beachte stets beim Einfügen von Werten in einen anderen Kontext dessen Regeln, besonders die Zeichen mit einer Sonderbedeutung. Wenn du die so notierst wie vom Kontext verlangt, kann keine Injection welcher Art auch immer auftreten. Die Beachtung der Notationsregeln ist nicht zur Verhinderung von *-Injection notwendig sondern für jegliche Daten. Auch ein gutmütiges ' beendet ein mit ' eingeleiteten String und sorgt mit dem nachfolgenden Zeichen in der Regel für Syntaxfehler.
Außerdem kann dich die Funktion nicht schützen, wenn sie falsch angewendet wird. Siehe Abschnitt Zahlen im (My)SQL-Statement. Es ist wichtig, das Prinzip zu verstehen und nicht einfach nur eine Funktion aufzurufen.
Zudem interessiert mich noch, ob es richtig ist, wenn ich die "Einstellungen" des Loginsystems (sprich: MySQL-Server-Adresse, MySQL-Passwort, MySQL-Name, etc. etc.) in der Klasse in privaten statischen Variablen speichere oder ob ich da irgendwie eine andere Form der Konfiguration wählen sollte. (Allerdings glaube ich, dass es in "PHPmyAdmin" auch so ähnlich gewesen ist.)
Der PMA speichert die Zugangsdaten in Elementen seines allgemeinen Konfigurationsarrays. Es gibt im Prinzip kein richtig oder falsch bei der Auswahl des Ortes der Konfigurationsdaten. Wenn du auf Wiederverwendbarkeit deiner Komponenten Wert legst, dann mach sie nicht von festen Werten abhängig sondern übergib diese beim Initialisieren über Funktions- oder Konstruktor-Parameter. Wenn du "Konvention vor Konfiguration" bevorzugst, definiere eine oder mehrere Variablennamen (oder Konstanten), in der die Konfigurationsdaten zu finden sein sollen.
Lo!