Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: PHP a databaze, co je spatne?

Aktivity
Avatar
php me bavi :-):12.10.2016 20:29

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.10.2016 20:29
Avatar
Odpovídá na php me bavi :-)
Martin Konečný (pavelco1998):12.10.2016 20:50

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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
12.10.2016 20:50
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Martin Konečný (pavelco1998)
php me bavi :-):12.10.2016 21:02

super, diky. to je ono

 
Nahoru Odpovědět
12.10.2016 21:02
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.