Ich denke, wenn jemand PHP und MySQL oder einen anderen Datenbankserver verwenden möchte:
- Über das Lernen nachdenken PDO (PHP Data Objects) - es handelt sich um eine Datenbankzugriffsschicht, die eine einheitliche Methode für den Zugriff auf mehrere Datenbanken bietet.
- Über das Lernen nachdenken MySQLi
- Verwenden Sie native PHP-Funktionen wie: strip_tags , mysql_real_escape_string oder, falls die Variable numerisch ist, einfach
(int)$foo
. Lesen Sie mehr über den Typ von Variablen in PHP aquí . Wenn Sie Bibliotheken wie PDO oder MySQLi verwenden, benutzen Sie immer PDO::quote() y mysqli_real_escape_string() .
Beispiele für Bibliotheken:
---- PDO
----- Keine Platzhalter - reif für SQL-Injection! Das ist schlecht
$request = $pdoConnection->("INSERT INTO parents (name, addr, city) values ($name, $addr, $city)");
----- Unbenannte Platzhalter
$request = $pdoConnection->("INSERT INTO parents (name, addr, city) values (?, ?, ?);
----- Benannte Platzhalter
$request = $pdoConnection->("INSERT INTO parents (name, addr, city) value (:name, :addr, :city)");
--- MySQLi
$request = $mysqliConnection->prepare('
SELECT * FROM trainers
WHERE name = ?
AND email = ?
AND last_login > ?');
$query->bind_param('first_param', 'second_param', $mail, time() - 3600);
$query->execute();
P.S. :
PDO gewinnt diesen Kampf mit Leichtigkeit. Mit Unterstützung für zwölf verschiedene Datenbanktreiber und benannte Parameter, können wir den Leistungseinbußen ignorieren und sich an seine API gewöhnen. Vom Standpunkt der Sicherheit sind beide sicher, solange der Entwickler sie so verwendet so verwendet, wie sie verwendet werden sollen
Aber während sowohl PDO als auch MySQLi recht schnell sind, leistet MySQLi unbedeutend schneller in Benchmarks - ~2,5% für nicht vorbereitete Anweisungen und ~6,5 % für vorbereitete Anweisungen.
Und bitte testen Sie jede Abfrage an Ihre Datenbank - das ist ein besserer Weg, um Injektionen zu verhindern.