Deine Konstruktion ist zwar sehr schön, aber pass auf, dass du dir nicht jegleiche Strings mit den slashes "zerstörst".
Hast du das schonmal ausprobiert? Alles was du da quotest übernimmt MySQL afaik mit in die Datenbank.
Nehmen wir an du hast ein String:
|
PHP Quellcode
|
1
|
$str = "Peter's";
|
Jetzt Quotest du:
|
PHP Quellcode
|
1
|
echo $str; // Ausgabe Peter\'s
|
Und so stehts dann auch in der Datenbank.
Wenn du pech hast und das ganze summiert sich, dann sieht dein String bei mehrfachen einlesen, speichern, auslesen so aus:
Peter\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s
Und wenn du dann noch ein "TEXT"-Feld hast, dann summiert sich das ganze natürlich gegen unendlich und du Müllst die gesamte Datenbank voll.
Aus der oberen Ausgabe wird dann :
Peter\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s
und beim nächsten mal:
Peter\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s
usw. ...
Ich habe das selber mal bei einem selbst geschriebenen CMS mit einem WYSIWYG-Editor miterlebt, der dann logischerweise nicht die slashes angezeigt hatte.
Nach circa einem Jahr fand es die Datenbank überhaupt nicht mehr Lustig, dass sich tausende Texte immer wieder und wieder multipliziert hatten
Dann solltest du wie geschrieben PDO oder mysqli_ nutzen.
Dort gibt es prepared Statements.
http://de3.php.net/manual/de/mysqli.prepare.php
|
PHP Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
|
$city = "Amersfoort";
/* create a prepared statement */
if ($stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?")) {
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $city);
/* execute query */
mysqli_stmt_execute($stmt);
....
|
Damit trennst du das reine SQL Statement und die Paramter. Beim binden übergibst du dann die Parameter und es wird dann automatisch von der Datenbank gequotet.
Und wie du hier sehen kannst:
http://de3.php.net/manual/de/mysqli-stmt.bind-param.php
gibt es beim binden auch die Möglichkeit gleich einen Datentyp anzugeben.
types: A string that contains one or more characters which specify the types for the corresponding bind variables:
Damit sparst du dir dann auch das intval oder anders typecasting.
Zum AUsgangspost zurück zu kommen, ist es so wie du selber sagst, dass man niemals 100%ig sicher ist, aber beruhigter kannst du auf jedenfall sein.
Zu beachten gibt es ne Menge, vielleicht nicht mehr so viel in Bezug auf SQL Injection, aber es gibt ganz viele andere "tolle" Verfahren die man noch nutzen kann.
http://de.wikipedia.org/wiki/Cross-Site_Scripting
(
http://www.wbb-security.de/support/progr…ermanipulation/)
http://de.wikipedia.org/wiki/Cross-Site_Request_Forgery
Und unterschätz das nicht, es gibt genug Kiddy "Schritt-für-Schritt"-Anleitungen und Tools wo das jeder machen kann.
Wie mehrmals geschrieben, wenn du das Geld entbehren kannst dann hol dir das oder ein vergleichbares Buch