невозможно вставить данные в php poo - PullRequest
0 голосов
/ 05 марта 2020

Я следовал руководству по oop php, и я делал C из crud, где у меня есть пользователь с его атрибутами. Когда я делаю вставку в bd, это просто save () или {()}, в примере человек использует `publi c function save () {

   $sql = "INSERT INTO usuarios (nombre, apellidos, email, password,rol,) VALUES('{$this->getNombre()}',
   '{$this->getApellidos()}','{ $this->getEmail()}','{$this->getPassword()}','user')";
   $save = $this->db->query($sql);
   $result=false;
   if($save){
        $result=true;
   }
   return $result;
}

`

Но когда я его использую, я получаю только save {()} на БД. Я попытался стереть {} из получателей, сохранить атрибуты в новых переменных и записать их в запрос, но не могу заставить его работать. Вот мой БД

И ошибка, которую я получаю

Спасибо за ваши ответы :)

1 Ответ

0 голосов
/ 05 марта 2020

Чтобы избежать 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.

...