我一直在关注有关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;
}
`
但是当我使用它时,我只将{{)}保存在数据库中。我尝试从吸气剂中删除{},并将属性保存在新变量中并将其写入查询中,但是我无法使其正常工作。 这是我的数据库
和 错误,我得到
谢谢您的回答 :)
为了避免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块捕获此类实例。