PHP - Fatal error: Uncaught Error: Call to a member function prepare() on null in

 
Vista:
sin imagen de perfil

Fatal error: Uncaught Error: Call to a member function prepare() on null in

Publicado por Nicolas (2 intervenciones) el 25/04/2023 07:01:55
Buenas, me sale este error al momento de actualizar o editar datos de un campo "nombre", les dejo dicho error con más detalle: Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\pdo\conectar.php:46 Stack trace: #0 C:\xampp\htdocs\pdo\editar.php(20): Datos->setDatos('update candidat...') #1 {main} thrown in C:\xampp\htdocs\pdo\conectar.php on line 46

Les dejo el código correspondiente:

conectar.php:

<?php
class Conectar{
private $conn;

public function conectar(){
try{
$this->conn = new PDO("mysql:dbname=sistema_votos;host=localhost", "root", "");
} catch(PDOException $error){
die("Error: ".$error);
}
return $this->conn;
}
public function setNames(){
return $this->conn->query("SET NAMES 'utf8'");
}
}

class Datos extends Conectar{
private $bd;

public function __construct(){
$this->bd = self::conectar();
self::setNames();
}

public function getDatos($sql){
$datos = $this->bd->prepare($sql);
if (!$datos) {
echo "\nPDO::errorInfo():\n";
print_r($this->bd->errorInfo());
die();
}
$datos->execute();
$this->bd=null;
return $datos->fetchAll();
}

public function getDato($sql){
$datos = $this->bd->prepare($sql);
$datos->execute();
$this->bd=null;
return $datos->fetch();
}

public function setDatos($sql){
$datos = $this->bd->prepare($sql);
$datos->execute();
//return $this->bd->lastInsertId();
}
}

editar.php:

<?php
require_once("conectar.php");
$datos_t = new Datos();
if(!isset($_GET['id_candidato'])){
die("error");
}

$candidato = $datos_t->getDato("select * from candidatos where id_candidato='".$_GET['id_candidato']."';");

if(isset($_POST['nombre'])){
$mensaje = "";
if(filter_var($_POST['nombre']) == false){
$mensaje.="El campo nombre está vacío";
}
if(!empty($mensaje)){
header("Location: editar.php?error=1&id_candidato=".$_GET['id_candidato']);
//echo "Error: ".$mensaje;
}else{
$datos_t->setDatos("update candidatos set candidato_elegido='".$_POST['nombre']."'
where id_candidato='".$_GET['id_candidato']."';");
header("Location:candidatos.php");
//header("Location:add.php?error=0");
}
}else{
//$candidatos = $datos_t->getDatos("SELECT * FROM candidatos;");
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Editar</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="card border-primary mb-3">
<div class="card-header bg-primary text-white">
<h1>Editar</h1>
</div>
<div class="card-body text-primary">
<form action="" method="POST" name="form">
<div class="mb-3">
<label for="nombre">Nombre Candidato</label>
<input type="text" class="form-control" name="nombre" id="nombre" value="<?php echo
$candidato['candidato_elegido']; ?>">
</div>
<hr>
<a href="javascript:void(0);" onclick="document.form.submit();" class="btn btn-primary">Enviar</a>
</form>
</div>
</div>
</div>
</body>
</html>

Estoy desesperado, porque no puedo encontrar la solución, agregar que he probado la conexión y con respecto a eso todo funciona bien, asi que problema de conexión no es.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder