Avatar
php me bavi :-):

ahoj mam tridu :

<?php

class DBAccess {

    /**
     * @param  $dbname - database name
     * @param $login - root login to the database
     * @param $password - database password
     */
    public function makeConnection($dbname, $login, $password) {
        try {
            $pdo = new PDO('mysql:dbname=' . $dbname . ';host=localhost', $login, $password);
        } catch (PDOException $exc) {
            echo 'failed ';
        }
    }
    public function closeConnection() {
        $pdo = null;
        echo 'conn. closed';
    }
    public function takeFromDB() {
        $stmt = $pdo->prepare('SELECT * FROM table WHERE id=1');
        $stmt->execute();
        while ($row = $stmt->fetch()) {
            print_r($row);
        }

    }
}

pak index.php kde je volana :

<?php

        require_once 'classes/DBAccess.php';
        $DBDoing = new DBAccess;
        $DBDoing->makeConnection('db', 'login', 'passwd');
        $DBDoing->takeFromDB();
        $DBDoing->closeConnection();
        ?>

kvuli radku :

$stmt = $pdo->prepare('SELECT * FROM table WHERE id=1');

dostavam chybu :

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

moc to jeste neumim, tak nevim proc. ze by ze $pdo neni incializovana. no je iniciolizovana v te prvni metode makeConnection. Snazim se to delat objektove, coz je pro me novinka. Samozdrejme ze pokud bych to napraskal do indexu.php vsechno za sebe ve stylu spagetovy kod tak to bezi, ale takhle jak to mam rozdelene na metody to nejde, co delam spatne? diky za pomoc :-)

 
Odpovědět 12. října 20:29
Avatar
Odpovídá na php me bavi :-)
Martin Konečný (pavelco1998):

Každá funkce (i v objektu) používá své lokální proměnné. Tzn. nevidí proměnné mimo ni.
Tu proměnnou $pdo musíš udělat jako atribut objektu, ke kterému metody přístup mít budou.

class DBAccess
{

        private $pdo;

        function makeConnection()
        {
                $this->pdo = new PDO(...);
        }


        function closeConnection()
        {
                $this->pdo = NULL;
        }


        function takeFromDB()
        {
                $stmt = $this->pdo->prepare(...);
        }

}
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 12. října 20:50
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.