Práce s databází ve třídách – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Práce s databází ve třídách – PHP – Fórum – Programujte.comPráce s databází ve třídách – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Face
~ Anonymní uživatel
6 příspěvků
28. 3. 2014   #1
-
0
-

Ahoj, jak správně napsat třídu, která pracuje s databází? Třeba když mám ve třídě privátní metodu, která z databáze získává data dle argumentů, které předá sám uživatel. S těmito získanými data chci pak ve třídě nadále pracovat. Je tedy lepší navrhnout třídu jako:

public function __construct($id)
{
....
}

// $dotaz = "SELECT * FROM users WHERE ID = ?";
private function metoda($dotaz)
{
....
return $ziskanaData;
}

a nebo:

public function __construct($id)
{
...
}

public function nastavInformace($tabulka, $poleID)
{
//uložení do privátních proměnných
}

private function metoda()
{
$dotaz = "SELECT * FROM $this->tabulka WHERE $this->poleID = ?";
...
return $vybranaData;
}

Popřípadě, je zde jiný více užitečný přístup, jak docílit podobného výsledku? Osobně mi přijde první případ méně užitečný, protože pokud s danou třídou budu pracovat po delší době, tak nebudu vědět, jak zapsat korektní dotaz, načež u druhé možnosti mě to trápit nemusí. Děkuji za rady.

Nahlásit jako SPAM
IP: 94.113.36.–
Reklama
Reklama
Kit+11
Guru
28. 3. 2014   #2
-
0
-

#1 Face
Možností je víc. Zkus třeba tohle: 

<?php

class User {
    const create = "CREATE TABLE user (
        id integer primary key autoincrement,
        name text
    )";
    const insert = "INSERT INTO user VALUES (NULL, ?)";
    const select = "SELECT * FROM user WHERE ID = ?";
    const delete = "DELETE FROM user WHERE ID = ?";

    private $db;

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

    function create() {
        $this->db->query(self::create);
    }

    function insert($name) {
        $insert = $this->db->prepare(self::insert);
        $insert->execute(array($name));
    }

    function delete($id) {
        $delete = $this->db->prepare(self::delete);
        $delete->execute(array($id));
    }

    function select($id) {
        $select = $this->db->prepare(self::select);
        $select->execute(array($id));
        return $select->fetch(PDO::FETCH_OBJ);
    }
}

$db = new PDO('sqlite::memory:', NULL, NULL,
    array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$user = new User($db);
$user->create();
$user->insert('Pavel');
$data = $user->select(1);
echo $data->name;
$user->delete(1);
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Face
~ Anonymní uživatel
6 příspěvků
28. 3. 2014   #3
-
0
-

Díky za reakci. Tvůj způsob vypadá dobře. Mně lámalo hlavou, jak bych měl tu třídu správně napsat, abych tam musel měnit co nejméně věcí. Druhý způsob, který jsem napsal v příspěvku vypadá dobře, nebo máš výhrady?

Nahlásit jako SPAM
IP: 94.113.36.–
Kit+11
Guru
28. 3. 2014   #4
-
0
-

#3 Face
Mám výhrady k vytváření různých ORM frameworků a univerzálních rozhraní. Tu minulou ukázku můžeš aplikovat nejen na jednotlivé tabulky, ale i na více tabulek s různými vazbami. Třída je pak trochu složitější, ale o to precizněji dělá svou práci. Pokud složitost překročí určitou míru, můžeš tu třídu rozdělit na 4 třídy - pro každý úkon jednu, ale pro práci na skupině svázaných tabulek. To se hodí zejména u architektury MVC.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 61 hostů

Podobná vlákna

Práce s databází - Pascal — založil El97za

Rychlejší práce s databází — založil Franceq

JDBC ODBC práce s databází — založil Duff.Beerman

Header ve třídách — založil tribalcz

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý