Suchen
Inside Forum
Nützliche Links
phpforum.de Tipp
 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > PHP > PHP

PHP Alles rund um PHP

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 26.02.2016, 21:36
SchwereSache SchwereSache ist offline
Neuer Besucher
 
Registriert seit: 25.02.2016
Beiträge: 7
Standard PDO query nicht vorhanden

ich habe folgendes problem mit pdo

ich wollte testweise ein query auf einer php seite ausführen, dabei bekam ich den fehler, dass query eine nicht definierte methode in meiner klasse sei.

Aussehen tut das ganze so:

PHP Quellcode:
<?php

class Database {


    public function __construct($host, $user, $password, $database, $port) {

        $this->host = $host;
        $this->user = $user;
        $this->password = $password;
        $this->database = $database;
        $this->port = $port;

        $this->connect();

    }

    public function connect() {

        $this->pdo = new PDO('mysql:host='.$this->host.';port='.$this->port.';dbname='.$this->database, $this->user, $this->password);

    }

}


PHP Quellcode:
class Main {

    protected static $db = null;

    public function getDB() {
        $dbHost = '';
        $dbUser = '';
        $dbPassword = '';
        $dbName = '';
        $dbPort = 0;

        self::$db = new Database($dbHost, $dbUser, $dbPassword, $dbName, $dbPort);
        return self::$db;
    }

}


aufrufen würde ich das ganze nun so:

PHP Quellcode:
$test = Main::getDB->query('SELECT * FROM irgendwas WHERE ID = 1');
var_dump($test);


was ich also verstehe und akzeptieren kann: query gibt es nicht, weil es in der klasse database keine funktion dafür gibt
aber pdo selbst bringt doch solche funktionen mit, wie greife ich nun also darauf zu?

vielleicht mache ich auch alles komplett falsch, ich lasse mir auch gerne tipps fürs anders/besser machen geben.

ich danke schonmal
Mit Zitat antworten
  #2  
Alt 26.02.2016, 21:56
hellbringer hellbringer ist offline
Forum-Mitarbeiter
 
Registriert seit: 27.03.2008
Beiträge: 30.426
Standard AW: PDO query nicht vorhanden

Du solltest statische Abhängigkeiten vermeiden. Sowas macht nur den Code schwer nachvollziehbar und erschwert die Fehlersuche.

Funktionsaufrufe werden übrigens mit () gekennzeichnet.
Mit Zitat antworten
  #3  
Alt 29.02.2016, 09:45
Marlon Schultz Marlon Schultz ist offline
Engagierter Besucher
 
Registriert seit: 27.05.2007
Ort: Berlin
Beiträge: 904
Standard AW: PDO query nicht vorhanden

Ich würde Dir dazu raten, dass Deine Datenbankklasse entweder PDO extended, oder Du Sie per injection übergibst.

Extension auch nur, weil PDO ein extrem gängiges Objekt ist. Dann hast Du sauber alles runtergeerbt was PDO so im Petto hat.

PHP Quellcode:
class meineKlasse extends \PDO {}


Besser ist es, wenn Du keine harte Abhängigkeit hineincodest, die von innerhalb der Klasse aufgelöst wird. Hellbringer spruch es bereits an.
Es ist stilschöner und für andere Coder leichter zu verstehen, wenn Du Deiner Klasse die nötige Abhängigkeit im Konstruktor übergibst und dabei gleich den notwendigen Typ festlegst.

Beispiel:

PHP Quellcode:
$pdoObject = new \PDO(konstruktorkram)
$meineDatenbankKlasse = new meineDatenbankKlasse($pdoObject)


Die DB Klasse ist in den Grundzügen so aufgebaut:

PHP Quellcode:
/**
Beschreibung
*/

class meineDatenBankklasse () {

private $this->_pdo // Unterstrich für die schnelle Erkennung von privater Var

public function __construct (\PDO $pdo) {
$this->_pdo = $pdo
}
}


Hierbei übergibst Du sauber ein Object vom Typ PDO an die Klasse. Andere Typen werden abgelehnt. Der Konstruktor legt Dir das auf in private Variable um, die Du dann Klassenintern nutzen kannst und magst wie Du willst. Der ganze Vorgang nennt sich Dependency injection. Er hat neben Übersichtlichkeit der Abhängigkeiten von außen (ein anderer Coder muss nicht in den Klassenquelltext steigen) auch nocha ndere Vorteile von der Wartbarkeit und Testbarkeit her.

Damit stehen Dir Deine Methoden sauber zur Verfügung.
__________________
Ich bin ein Signaturvirus, verwenden sie mich auch, damit ich mich verbreiten kann.
Mit Zitat antworten
  #4  
Alt 29.02.2016, 11:08
hellbringer hellbringer ist offline
Forum-Mitarbeiter
 
Registriert seit: 27.03.2008
Beiträge: 30.426
Standard AW: PDO query nicht vorhanden

Ich seh da keine Notwendigkeit für eine Ableitung. Warum nicht direkt mit PDO arbeiten?
Mit Zitat antworten
  #5  
Alt 29.02.2016, 14:01
Marlon Schultz Marlon Schultz ist offline
Engagierter Besucher
 
Registriert seit: 27.05.2007
Ort: Berlin
Beiträge: 904
Standard AW: PDO query nicht vorhanden

Kann man auch machen. Erschien mir nicht als das Ziel der (Lern)Frage.
__________________
Ich bin ein Signaturvirus, verwenden sie mich auch, damit ich mich verbreiten kann.
Mit Zitat antworten


Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PDF DLL nicht vorhanden nime01 PHP 3 18.10.2010 16:53
Passwort nicht vorhanden any4852 Datenbanken 3 08.10.2008 10:45
Sessiondaten mal vorhanden mal nicht vorhanden Tomarte PHP 3 23.03.2008 14:23
Query Problem: "Sobald einmal nicht ok... nicht eintragen!" cscp Datenbanken 4 12.04.2006 12:13
Tabellen rahmen -> Nich vorhanden wenn keine daten vorhanden r4v3n HTML 8 05.07.2005 21:15


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:07 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC