Datenbankverbindung

okay, danke.

Bei einem steige ich noch nicht richtig durch. Ich habe jetzt meine Database.php in der die oben gezeigte Klasse ist. Daneben habe ich noch eine index.php, in dem der Code dann ablaufen soll und die Acces.php, wo die Klasse Access ist. Nehmen wir an die Acces.php hat 2 Funktionen, dann muss ich ja in jeder Funktion die Database.php includieren und ein neues Datenbankobjekt erstellen. Wie mache ich nun, das ich nur ein Datenbankobjekt erstelle und alle Klassen darauf zugreifen können, so nach dem Motto:
PHP:
function bla($arr){$this->database->prepare(...)}


Gruß
Im Konstruktor der Klassen das Datenbankobjekt übergeben und als Eigenschaft speichern würde ich jetzt mal so auf die Schnelle sagen:
PHP:
class Access
{
    private $objDatabase = null;

    public function __construct( Database $objDatabase )
    {
        $this->objDatabase = $objDatabase;
    }

    private function tuWas()
    {
        $this->objDatabase->exec( /* ... */ );
    }

    /* ... */
}

Und da wo Du es brauchst:
PHP:
require 'Database.class.php';
require 'Access.class.php';
// usw

$objDBci = new Database( Database::DB_CI );

$objAccess = new Access( $objDBci );

$objAndereKlasse = new AndereKlasse( $objDBci );

$objGanzAndereKlasse = new GanzAndereKlasse( new Database( Database::DB_VZ ) );

Gruß
 
Zuletzt bearbeitet:
Und schon wieder muss ich mich bedanken, aber trotzdem habe ich noch eine Frage :)

Will jetzt meine Login-Funktion aufrufen und diese 2 Parameter übergeben.

index.php
PHP:
require('Klassen/Access.php');
require('Libraries/php/Database.php');

$user = 'max.mustermann';

$CI = new Database(Database::DB_CI);
$access = new Access($CI);
$result = $access->login($user, $password);
var_dump($result);

und die Access.php
PHP:
class Access{
    private $Database = null;

    public function __construct($Database){
        $this->Database = $Database;
    }

    function login($user,$password){
        //Abfrage ob Benutzer existiert
        $sql= $this->Database->prepare("SELECT password FROM `mitglieder` WHERE username= :username ");
        $sql-> bindParam(':username',$user);
        $sql-> execute();

        $checkPasswort = $sql->fetchObject()->password;
       
        return $checkPasswort;
    }
}

Jetzt bekomme ich folgenden Fehler: Trying to get property of non-object in Line 25. Das ist die
PHP:
 $checkPasswort = $sql->fetchObject()->password;

Wo hackt es den nun wieder?
 
PHP:
        $checkPasswort = $sql->fetchObject(); 
        
        return $checkPasswort->password;
Sollte es mMn heißen.

//EDIT
Aber wozu übergibst Du das Passwort an die Methode wenn Du es nicht verwendest?

//EDIT 2
Ich denke ein Objekt als Result ist an der Stelle übertrieben:
PHP:
        $checkPasswort = $sql->fetch( PDO::FETCH_ASSOC ); 
        
        return $checkPasswort['password'];
 
Zuletzt bearbeitet:
Hm, kommt trotzdem der selbe Fehler.
PHP:
$checkPasswort = $sql->fetchAll();
return $checkPasswort;

gibt array(0) { } zurück.

Hab dann mal den return mit $sql gemacht und es scheint, das er username nicht mit $user ersetzt.

Momentan ist die Klasse noch nicht fertig. Diese wird noch mit viel mehr Daten gefüttert :)
 
Versuch es mal damit:
PHP:
$stmt = $this->Database->prepare( "SELECT password FROM mitglieder WHERE username = :username" );
$stmt->bindParam( ':username', $user, PDO::PARAM_STR );
$stmt->execute();

$result = $stmt->fetchAll( PDO::FETCH_ASSOC );

return $result;
 
Zurück