Danke fürs Lesen und meine Frage unter Berücksichtigung ..PHP PDO Dependency Injection
Ich bin neu in PDO und OOP (richtig - ich habe Objekte mehr ähnliche Funktionen seit einiger Zeit verwendet wird), und ich Ich versuche meine aktuellen Benutzeranmeldeskripte zu konvertieren, um Session-Hijacking zu verhindern (und gleichzeitig die Daten aus der Datenbank leichter zu machen) ... trotzdem ...
Zusätzlich - ich mache das, um zu lernen, nicht weil Ich brauche ein Login-Skript. Wenn ich so etwas brauchte, würde ich ein Framework verwenden, das bereits bewiesen ist.
ich diese Klasse bin Konstruktion für UserSessions
, definiert so:
class UserSession {
public $userSessionId;
public $loggedInUserId;
public $userIp;
public $userFwdIp;
public $httpUserAgent;
public $authenticated;
private $hashedPassword;
private $suppliedUserName;
private $suppliedPassword;
public function __construct ($pdoConn) {
$this->setUserSessionId();
$this->setUserIp();
$this->setUserFwdIp();
$this->setSessionExpire();
$this->setHttpUserAgent();
$this->setLoggedInUserId();
$this->updateCurrentSession();
}
private function setLoggedInUserId() {
$query = 'select 1 from dual';
$this->loggedInUserId = $pdoConn->query($query)->fetch()[0];
}
// several other methods below that all function properly
}
ich die Klasse instanziiert hier:
$databaseConnect = new $config['database_type']($config);
$pdoConn = new PDO( $databaseConnect->connectString
, $databaseConnect->getDataBaseUser()
, $databaseConnect->getDataBasePass()
, array(PDO::ATTR_EMULATE_PREPARES=>false
, pdo::ATTR_ERRMODE=>pdo::ERRMODE_EXCEPTION)
);
$httpReqUser = new UserSession($pdoConn);
Allerdings habe ich den folgenden Fehler: Anruf auf eine Elementfunktion query() auf null
Also, das sagt mir, dass das $pdoConn
Objekt ist null
(I denke) ... aber ich kann nicht herausfinden warum.
Ich habe versucht, eine neue Variable in die $pdoConn
Wert, der für den lokalen Gebrauch, wie dies in von außerhalb des Konstruktor übergeben wird:
$this->setPdoConn($pdoConn) // and within that method it's a simple setter...
Vielleicht bin ich Missverständnis, was genau soll ich hier tun.
Grundsätzlich - diese UserSession
Klasse muss aktualisieren oder fügen Sie einige Felder in eine Tabelle ein, dennoch wird es Zugriff auf PDO benötigen, aber ich möchte nicht jedes Mal ein 'neues PDO' aufrufen müssen benutze es in allen meinen Klassen. Wie soll ich das angehen?
Sie könnten aussehen wollen in 'Dependency Injection container' wie; http://php-di.org/ oder http://pimple.sensiolabs.org/ – Perspective
Ich frage mich, ob setLoggedInUserId-Methode ist eine echte –
@tadman finden Sie im dritten Absatz. ... @ Ihr gesunder Menschenverstand, Nein, diese Abfrage gibt nur 1 zurück, aber es gibt nur 1 zurück, wenn die Verbindung gut ist. – Jeff