温馨提示:本文翻译自stackoverflow.com,查看原文请点击:crud - can't insert data in php poo
crud php

crud - 无法在php poo中插入数据

发布于 2020-05-21 15:58:01

我一直在关注有关oop php的教程,而我正在做C的C程序,在这里我有一个带有其属性的用户。当我将内容插入bd时,只需保存()或{()},在此示例中,人员使用`public 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;
}

`

但是当我使用它时,我只将{{)}保存在数据库中。我尝试从吸气剂中删除{},并将属性保存在新变量中并将其写入查询中,但是我无法使其正常工作。 这是我的数据库

错误,我得到

谢谢您的回答 :)

查看更多

提问者
Bridzkey
被浏览
27
Marcel 2020-03-05 05:34

为了避免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;

此外,您可以通过try / catch块将通过PDO的sql查询的执行包装起来。因此,如果发生任何异常,您可以捕获它并查看究竟出了什么问题。

try {
    // execute your logic here
} catch (PDOException $e) {
    var_dump($e, $this->db->errorInfo());
}

希望这可以帮助。

此外,您的SQL语法有错误。之后的最后一个逗号rol此外,错误消息还指出,()该密钥的条目uq_email已经存在。您可以使用上面显示的try / catch块捕获此类实例。