Я понимаю, что правильный способ защитить БД от внедрения SQL - использовать подготовленные операторы. Я хотел бы понять, как подготовленные заявления защищают мою базу данных.
Для начала подготовленные операторы - это то же самое, что и "параметризованные запросы"?
В качестве примера, я вставляю ниже свой код для вставки нового пользователя в пользовательскую таблицу. Это безопасно? Как PDO работает, чтобы сделать его безопасным? Что еще нужно сделать, чтобы обезопасить БД от инъекций?
В «Class_DB.php»:
class DB {
private $dbHost;
private $dbName;
private $dbUser;
private $dbPassword;
function __construct($dbHost, $dbName, $dbUser, $dbPassword) {
$this->dbHost=$dbHost;
$this->dbName=$dbName;
$this->dbUser=$dbUser;
$this->dbPassword=$dbPassword;
}
function createConnexion() {
return new PDO("mysql:host=$this->dbHost;dbName=$this->dbName", $this->dbUser, $this->dbPassword);
}
}
В 'DAO_User.php':
require_once('Class_DB.php');
class DAO_User {
private $dbInstance;
function __construct($dbInstance){
$this->dbInstance=$dbInstance;
}
function createUser($user){
$dbConnection=$this->dbInstance->createConnexion();
$query=$dbConnection->prepare("INSERT INTO users (userName, hashedPassword, userEmail) VALUES (?,?,?)");
$query->bindValue(1, $user->userName);
$query->bindValue(2, $user->hashedPassword);
$query->bindValue(3, $user->userEmail);
$query->execute();
}
}
Спасибо
JDelage