Чтобы избежать sql инъекции, вы должны использовать подготовленные заявления. Они поставляются с PDO и довольно просты в использовании. Посмотрите на следующий пример.
$sql = "
INSERT INTO
usuarios
(nombre, apellidos, email, password,role)
VALUES
(:nombre, :apellidos, :email, 'user')
";
$stmt = $this->db->prepare($sql);
$result = $stmt->execute([
'nombre' => $this->getNombre(),
'apellidos' => $this->getApellidos(),
'email' => $this->getEmail()
]);
return $result;
Более подробно вы можете заключить выполнение вашего запроса sql через PDO в блок try / catch. Поэтому, если возникает какое-либо исключение, вы можете его поймать и посмотреть, что именно пошло не так.
try {
// execute your logic here
} catch (PDOException $e) {
var_dump($e, $this->db->errorInfo());
}
Надеюсь, это поможет.
Кроме того, ваш синтаксис SQL получил ошибку. Последняя запятая после rol
. Далее в сообщении об ошибке говорится, что запись ()
для ключа uq_email
уже существует. Этот вид исключений вы можете поймать с помощью показанного выше блока try / catch.