[Risolto] Problema ->prepare()
[Risolto] Problema ->prepare() postato il 05/08/2022 15:03:35 nel forum programmazione, open source e hosting e modificato da gdr-online.com il 05/08/2022 17:16:52
class pdo_connect
{
private $pdo;
public function __construct()
{
$this->pdo = new PDO("mysql:host=localhost;dbname=xxx;", "xxx", "xx");
}
public function login($email,$password)
{
$query = "
SELECT * FROM account
WHERE email = :email
AND password = :password";
$statement = $pdo->prepare($query);
$statement->bindValue(":email", $email, PDO::PARAM_STR);
$statement->bindValue(":password", $password, PDO::PARAM_STR);
$statement->execute();
}
}
cosa sto sbagliando? mi dice:
Uncaught Error: Call to a member function prepare() on null in ....
Pagine → 1
05/08/2022 15:30:13 e modificato da blancks il 05/08/2022 15:31:10
Ciao! 😃
Quello che sbagli, nello specifico, è che fai uso della variabile "$pdo" che non viene definita da nessuna parte. L'errore te lo spiega:
Call to a member function prepare() on null
Letteralmente: "Stai chiamando la funzione membro prepare() su un valore null".
Per accedere all'istanza salvata dentro
private $pdo;
Devi usare la variabile speciale "$this" che contiene il riferimento della classe dentro cui stai operando e che ti permette di accedere alle sue proprietà o metodi.
Detta in termini spiccioli:
$statement = $this->pdo->prepare($query);
05/08/2022 15:30:21 e modificato da anneth il 05/08/2022 15:31:02
$statement = $pdo->prepare($query);
prova con
$statement = $this->pdo->prepare($query);
edit: ops XD pensata e scritta insieme XD
05/08/2022 15:31:30 e modificato da soizora il 05/08/2022 15:32:11
...$this->pdo->prepare()...
Sei dentro la classe, visto che $pdo è una proprietà devi chiamarlo con $this
05/08/2022 16:17:14 e modificato da darkblade il 05/08/2022 16:19:02
uhmmm no...
class pdo_connect
{
private $pdo;
public function __construct()
{
try
{
$this->pdo = new PDO("mysql:host=localhost;dbname=xxx;", "xxx", "xxx");
}
catch ( PDOException $e )
{
echo 'ERROR!';
print_r( $e );
return false;
}
return true;
}
public function login($email,$password)
{
$query = "SELECT * FROM account WHERE email = :email AND password = :password";
try
{
$statement = $this->$pdo->prepare($query);
$statement->bindValue(":email", $email, PDO::PARAM_STR);
$statement->bindValue(":password", $password, PDO::PARAM_STR);
$statement->execute();
}
catch ( PDOException $e )
{
echo 'ERROR!';
print_r( $e );
return false;
}
return true;
}
}
continua a darmi l'errore...
05/08/2022 16:23:44
$this->pdo = new PDO("mysql:host=localhost;dbname=xxx;", "xxx", "xxx");
hai dato le coordinate del db o hai copiaincollato il codice così com'è quindi non hia sostituito le varie xxx?
05/08/2022 16:33:27 e modificato da blancks il 05/08/2022 16:39:17
darkblade ha scritto: uhmmm no...
continua a darmi l'errore...
. L'errore è lo stesso di prima? Se diverso, puoi copiarlo qui?
. Potresti mostrare anche la parte di codice in cui richiami la classe e usi il metodo login?
Edit: ho notato solo in seguito questo:
$statement = $this->$pdo->prepare($query);
E' un errore, va scritto così (senza il $):
$statement = $this->pdo->prepare($query);
05/08/2022 17:11:40
E' un errore, va scritto così (senza il $):
$statement = $this->pdo->prepare($query);
[/quote]funziona grazieeeeee :D
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
State of Survival ↗
Enlisted ↗
Raja Dunia ↗
Storie di Agarthi ↗
Neverness to Everness ↗
Imperion ↗
Hero Wars ↗
New Orleans ↗