Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde

Lekce 13 - Objektové počítadlo návštěv v PHP - dokončení

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Objektové počítadlo návštěv v PHP a PDO, jsme začali programovat počítadlo návštěv. Založili jsme si databázovou tabulku a naučili se obsluhovat databázi pomocí ovladače PDO. V dnešním PHP tutoriálu si ukážeme, jak databázové spojení udržovat, předávat a jak usnadnit spouštění dotazů.

Databázový wrapper

Práce s databází v PDO, jak jsme si ji ukazovali, má jeden nedostatek. Určitě totiž budeme chtít používat databázi na více místech v aplikaci a takto bychom se museli pokaždé znovu připojovat nebo si instanci spojení ručně předávat. Když si vzpomeneme na statiku, tak právě ta nám umožňuje sdílet nějaká data v celé aplikaci. Vytvoříme si tzv. databázový wrapper. Bude se jednat o statickou, pomocnou třídu, kterou obalíme volání PDO. Z toho označení wrapper, jako obal.

Vytvoříme si naši známou složku pro třídy, opět ji pojmenujeme třeba tridy. Ve složce vytvoříme soubor Databaze.php s následujícím obsahem:

<?php

class Databaze
{

    private static $spojeni;

    private static $nastaveni = array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
    );

    public static function pripoj($host, $uzivatel, $heslo, $databaze)
    {
        if (!isset(self::$spojeni))
        {
            self::$spojeni = @new PDO(
                "mysql:host=$host;dbname=$databaze",
                $uzivatel,
                $heslo,
                self::$nastaveni
            );
        }
        return self::$spojeni;
    }

    public static function dotaz($sql, $parametry = array())
    {
        $dotaz = self::$spojeni->prepare($sql);
        $dotaz->execute($parametry);
        return $dotaz;
    }

}

Třída je velmi krátká a obsahuje dva privátní statické atributy. Jedním je nastavení PDO, druhým je právě připojená instance PDO, kterou budeme v aplikaci sdílet.

Ve třídě dále nalezneme dvě veřejné statické metody. Jednu pro připojení, která vytvoří instanci PDO a tu uloží do statické proměnné $spojeni. Tam připojená instance zůstane až do skončení skriptu. Druhá statická metoda nám umožňuje zadat dotaz a jeho parametry. Dotaz je potom předán instanci PDO a metoda navrátí to, co navrátil dotaz. Wrapper je velmi jednoduchý a během tohoto i dalších seriálů ho budeme ještě vylepšovat. Zatím nám však stačí.

Třída SpravceNavstev

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Logiku ke správě návštěv umístíme do nové třídy SpravceNavstev. Určitě budeme potřebovat metodu k zaznamenání návštěvy, přesněji k uložení zobrazení. Dále se nám bude hodit metoda, která vrátí celkový počet zobrazení a unikátních návštěvníků. Na konec přidejme metodu, která vrátí návštěvy a zobrazení za posledních několik dní.

Naše třída bude vypadat asi takto:

<?php

class SpravceNavstev
{

    public function zapocitej()
    {
        Databaze::dotaz('
            INSERT INTO `zobrazeni`
            (`ip`, `datum`)
            VALUES (?, ?)
        ', array($_SERVER['REMOTE_ADDR'], time()));
    }

    public function zobrazeniCelkem()
    {
        $vysledek = Databaze::dotaz('
            SELECT COUNT(*) AS `pocet`
            FROM `zobrazeni`
        ');
        $data = $vysledek->fetch();
        return $data['pocet'];
    }

    public function zobrazeniZa($dnu)
    {
        $vysledek = Databaze::dotaz('
            SELECT COUNT(*) AS `pocet`
            FROM `zobrazeni`
            WHERE `datum` > ?
        ', array(time() - $dnu * 86400));
        $data = $vysledek->fetch();
        return $data['pocet'];
    }

    public function uipCelkem()
    {
        $vysledek = Databaze::dotaz('
            SELECT COUNT(DISTINCT `ip`) AS `pocet`
            FROM `zobrazeni`
        ');
        $data = $vysledek->fetch();
        return $data['pocet'];
    }

    public function uipZa($dnu)
    {
        $vysledek = Databaze::dotaz('
            SELECT COUNT(DISTINCT `ip`) AS `pocet`
            FROM `zobrazeni`
            WHERE `datum` > ?
        ', array(time() - $dnu * 86400));
        $data = $vysledek->fetch();
        return $data['pocet'];
    }

    public function vypisStatistiky()
    {
        echo('<table>');
            echo('<tr>
                <td>Zobrazení celkem</td>
                <td>' . $this->zobrazeniCelkem() . '</td>
            </tr>');
            echo('<tr>
                <td>UIP celkem</td>
                <td>' . $this->uipCelkem() . '</td>
            </tr>');
            echo('<tr>
                <td>Zobrazení měsíc</td>
                <td>' . $this->zobrazeniZa(30) . '</td>
            </tr>');
            echo('<tr>
                <td>UIP mesíc</td>
                <td>' . $this->uipZa(30) . '</td>
            </tr>');
            echo('<tr>
                <td>Zobrazení týden</td>
                <td>' . $this->zobrazeniZa(7) . '</td>
            </tr>');
            echo('<tr>
                <td>UIP týden</td>
                <td>' . $this->uipZa(7) . '</td>
            </tr>');
        echo('</table>');
    }

}

Ve třídě používáme náš statický databázový wrapper. Obsahuje celkem 6 jednoduchých metod. První je metoda pro uložení nového zobrazení. Tento dotaz jsme si již uváděli, teď jen používáme náš wrapper. Další 2 metody vracejí buď celkový počet zobrazení nebo počet zobrazení za posledních několik dní. Podobně potom máme 2 metody pro UIP. Všechny metodu jsou veřejné, kdybychom si někde v aplikaci chtěli zjistit nějakou statistiku samostatně.

Pokud z výsledku dotazu potřebujeme přečíst nějakou hodnotu, je třeba nejprve zavolat na výsledku metodu fetch() nebo fetchAll().

Fetch() vrátí další řádek výsledku (jako pole), fetchAll() vrátí pole všech řádků, které dotaz vrátil. Fetch() budeme volat v případě, kdy nás zajímá jen jeden řádek. FetchAll() potom tehdy, kdy nás zajímají všechny řádky. Na výsledku můžeme zavolat také rowCount(), která vrátí počet řádků ve výsledku. Nepoužívejte ji však místo SQL příkazu COUNT! K zajištění počtu unikátních IP adres jsme použili klauzuli DISTINCT. Pokud jste četli zdejší MySQL seriál, tak jistě více, že právě ta pracuje s unikátními řádky.

V dotazech dále používáme konstantu 86400, což je počet vteřin ve dni :) Konstantu vynásobíme počtem dní a výsledek odečteme od aktuálního času, který vrací funkce time(). Máme potom datum, od kterého nás statistiky zajímají. Takováto práce s datem a časem mi přijde velmi přehledná, ale to je asi věc názoru. Klidně můžete používat databázový DATETIME.

Zprovoznění aplikace

Pojďme vše zprovoznit. Vraťme se do index.php, vložme do něj HTML strukturu, PHP autoloader (abychom nemuseli třídy načítat ručně) a nekonec se připojme k databázi.

<!DOCTYPE html>

<html lang="cs-cz">
    <head>
            <meta charset="utf-8" />
            <title>OOP v PHP na ITnetwork</title>
    </head>

    <body>
        <h1>Návštěvnost webu</h1>
        <?php
        mb_internal_encoding("UTF-8");

        function nactiTridu($trida)
        {
            require("tridy/$trida.php");
        }

        spl_autoload_register("nactiTridu");

        Databaze::pripoj('localhost', 'root', '', 'pocitadlo_db');

        ?>
    </body>
</html>

Spojení se uložilo do statické proměnné a už se o něj nemusíme starat, zůstane tam do skončení skriptu.

Započítání návštěvy a výpis tabulky návštěv vložíme pro jednoduchost obojí do indexu. V praxi je zjištění počtu návštěv velmi náročná operace (kvůli COUNT ve velkém počtu záznamů) a proto ji budeme volat jen někde v administraci, abychom se podívali jak si stojíme. Naopak započtení návštěvy zavoláme na každé stránce webu.

$spravceNavstev = new SpravceNavstev();
$spravceNavstev->zapocitej();
$spravceNavstev->vypisStatistiky();

Výsledek jsme nijak nestylovali, takže vypadá skromně:

Your page
localhost

Příští lekce, Interface (rozhraní v PHP), bude o dalších technikách v OOP, kterých jsme neprobrali ještě celou řadu. Výsledek dnešního snažení je ke stažení pod článkem.


 

Stáhnout

Staženo 842x (3.73 kB)
Aplikace je včetně zdrojových kódů v jazyce PHP

 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
22 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Předchozí článek
Objektové počítadlo návštěv v PHP a PDO
Všechny články v sekci
Objektově orientované programování (OOP) v PHP
Miniatura
Následující článek
Cvičení k 12.-13. lekci OOP v PHP
Aktivity (8)

 

 

Komentáře

Avatar
Pavel Vosyka
Člen
Avatar
Pavel Vosyka:5.9.2013 12:26

Parádní tutoriál! Konečně tomu OOP začínám víc rozumět. Těším se na pokračování, jen tak dál.

Odpovědět  +1 5.9.2013 12:26
"nikdy nepiš nic 2x"
Avatar
Jan
Neregistrovaný
Avatar
Jan:2.1.2014 1:40

Šlo by to takhle?
<?php
class Databaze
{

public function __construct($hos­t,$db_name,$u­ser,$password){
$this->host=$host;
$this->db_name=$db_name;
$this->user=$user;
$this->password=$pas­sword;

$db = new PDO("mysql:hos­t=$this->host;dbname=$this->db_name", "$this->user", "$this->password");
$this->pdo=$db;

}

public function Vloz(){

$vloz = $this->pdo->prepare('INSERT INTO pristupy (ip, datum) VALUES (?, ?)');
$hodnoty = array($_SERVER['RE­MOTE_ADDR'], time());
$vloz->execute($hodnoty);
}

}

$pripoj=new Databaze("local­host","test","ro­ot","");

$pripoj->Vloz();

?>

 
Odpovědět 2.1.2014 1:40
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan
Kit:2.1.2014 2:27

Vypadá to sice trošku kostrbatě, ale po drobných úpravách by to mohlo být lepší řešení, než v článku:
http://www.itnetwork.cz/dev-lighter/276

Odpovědět 2.1.2014 2:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan
Neregistrovaný
Avatar
Jan:2.1.2014 13:11

Díky za úpravy. Po odeslání komentáře mě hned napadlo udělat $host, $name atd.. jako Private a s nastavením PDO sem se nezdržoval :)

 
Odpovědět 2.1.2014 13:11
Avatar
Kit
Redaktor
Avatar
Odpovídá na Jan
Kit:2.1.2014 13:18

Těch úprav tam mám víc. Všimni si líného otevírání databáze. Tohle ti umožní inicializovat databázi i v případě, že ji ve skutečnosti nebudeš potřebovat. Můžeš to tedy dát na začátek skriptu ještě před rozhodnutím, co vlastně bude dělat.

Odpovědět 2.1.2014 13:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
tommy58
Člen
Avatar
tommy58:11.2.2014 21:24

Ahoj programátoři,

předem díky moc za tento článek, hledal jsem přesně toto, jen bych měl malý problém, jsem těžkej začátečník v PHP vůbec a Mysql rovněž, ale k mé otázce. Na lokálním serveru to všechno funguje, ale když nahraju soubory na web server hlásí mi to fatální chybu: Undefined class constant 'PDO::MYSQL_AT­TR_INIT_COMMAND Databaze.php on line 30, nevěděl by někdo, kde dělám chybu?

Díky

 
Odpovědět 11.2.2014 21:24
Avatar
Dominik Čoupek:12.2.2014 16:03

Ahoj mám problém potřebuji vypsat obrázek z databáze, ale vždy mi to vypíše pouze první obrázek
Fotogalerie.php:

public function Vybergalerii()
    {
        $vysledek = Databaze::dotaz('
            SELECT  obrazek FROM `fotogalerie`
        ');
        $data = $vysledek->fetch();


        return $data['obrazek'] ;




    }
    public function Vypis()
    {

               echo   $this->Vybergalerii();


    }

a index.php:

require_once('tridy/Fotogalerie.php');
$fotogalerie = new Fotogalerie();
$fotogalerie->Vybergalerii();
$fotogalerie->Vypis();

Předem díky za odpovědi.

 
Odpovědět 12.2.2014 16:03
Avatar
Odpovídá na Dominik Čoupek
Dominik Čoupek:12.2.2014 16:04

Samozřejmě datábázový wrapper je stejný jako v článku.

 
Odpovědět 12.2.2014 16:04
Avatar
Odpovídá na Dominik Čoupek
Martin Konečný (pavelco1998):12.2.2014 16:22

Máš metodu nazvanou "vyberGalerii", která ti z DB vybere obrázek.

Pokud chceš všechny obrázky z tabulky fotogalerie, pak namísto fetch() použij fetchAll(). To ti vytvoří pole, které pak projdeš cyklem (nejjednodušeji přes foreach).

Odpovědět  +1 12.2.2014 16:22
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
tommy58
Člen
Avatar
Odpovídá na tommy58
tommy58:14.2.2014 9:55

Tak vyřešeno, neměl jsem na straně serveru aktivováno rozšíření PDO MySQL...

 
Odpovědět 14.2.2014 9:55
Avatar
Samuel Illo
Redaktor
Avatar
Samuel Illo :17.9.2014 13:43

Neviem čím to je, ale návštevy mi pripočítava po dvoch a nie po jednej :D

....čiže napr. mám 5 návšťev a po F5 mi ukáže 7 :D

Odpovědět 17.9.2014 13:43
www.samuelillo.com | www.github.com/lamka02sk
Avatar
Marek Šafránek:16.1.2015 13:18

zase na to koukám jako kráva do hodin, ale už je to lepší :D

Odpovědět 16.1.2015 13:18
Stojí-li něco za námahu, je třeba to udělat pořádně...
Avatar
Filip Bury
Člen
Avatar
Filip Bury:28.3.2015 1:54

Ahoj, mám k tomu dotaz. Co si myslíš o použití konstant při připojování k databázi? Konkrétně takto:

class Databaze {

    const HOST = 'localhost';
    const UZIVATEL = 'root';
    const HESLO = '';
    const DATABAZE = 'oop';

    private static $spojeni;

    private static $nastaveni = Array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
    );

    public static function pripoj() {
        if(!isset(self::$spojeni)){
            self::$spojeni = @new PDO(
                    "mysql:host=".self::HOST.";dbname=".self::DATABAZE."",
                    self::UZIVATEL,
                    self::HESLO,
                    self::$nastaveni
                    );
            }
            return self::$spojeni;
    }

...

Editováno 28.3.2015 1:54
 
Odpovědět 28.3.2015 1:54
Avatar
Danny
Člen
Avatar
Danny:20.7.2015 19:08

Ahoj, prosím o upřesnění DISTINCT, jak je v článku psáno, že je v článcích o databázích, tak jsem je projížděl několikrát a nikde jsem zmínku o DISTINCT nenašel, jestli jsem slepej zabte mě :D
DISTINCT teda projde řádky s IPadresama a vrátí počet lišících se IP?

 
Odpovědět 20.7.2015 19:08
Avatar
Neaktivní uživatel:18.2.2016 0:11

Používat otazníkové parametry v SQL dotazu pro dosazení parametrů mi přijde dost hloupé. Je to přesně ten přístup, který vede k chybám, které snadno vznikají a pak se těžko hledají. Zejména u větších složitějších SQL dotazů, kde těch parametrů je mraky. Stačí trochu přepsat SQL dotaz, čímž změní se pořadí otazníkových parametrů a neštěstí je na světě. Parametry je třeba dávat zásadně jedině pojmenované - tedy dvojtečka a název parametru - např. :USERNAME .. viz http://php.net/…indparam.php

$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
Odpovědět 18.2.2016 0:11
Neaktivní uživatelský účet
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Neaktivní uživatel
David Čápka:18.2.2016 8:29

Pak ti musí přijít stejně hloupé volat běžné PHP funkce, které také nemají parametry pojmenované. Když máš SQL dotaz na 50 řádků, tak to dává smysl, ale u toho příkladu co jsi uvedl je to kontraproduktivní, polovina kódu je jen balast.

Odpovědět 18.2.2016 8:29
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na David Čápka
Neaktivní uživatel:18.2.2016 9:37

Navádíš lidi úplně zbytečně ke špatným programátorským technikám a ani to neumíš přiznat. Smutné.

Odpovědět  -2 18.2.2016 9:37
Neaktivní uživatelský účet
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Neaktivní uživatel
David Čápka:18.2.2016 9:42

Promiň, ale dokud mi neprokážeš alespoň pár let zkušeností ve větší IT firmě, tak na takovéhle narážky nebudu vůbec reagovat, proč se to tak předává jsem ti vysvětlil. Až budeš spravovat systém co má 100.000 řádků zdrojového kódu tak si dobře rozmyslíš psaní extra řádků pro každý parametr, pokud to nebude mít přidanou hodnotu, což ve tvém příkladu prostě nemá.

Odpovědět 18.2.2016 9:42
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
kivdul
Člen
Avatar
kivdul:24.6.2016 14:20

Ahoj

ve 12. díle v $nastavení je i toto:

PDO::ATTR_EMULATE_PREPARES => false,

v tomto 13. díle již v $nastavení není. Chci se zeptat jestli to omylem vypadlo při přepisování, nebo je to zámeř, jestli ano tak jaký?

děkuji Ludvík

 
Odpovědět 24.6.2016 14:20
Avatar
kivdul
Člen
Avatar
kivdul:24.6.2016 14:42

ještě jednou já, Ludvík :-D

v této časti kodu

self::$spojeni = @new PDO(

je pro mě @ novým znakem, absolutně jsem nepobral, kde se tu zavináč vzal a co je jeho funkcí!

děkuji Ludvík

 
Odpovědět 24.6.2016 14:42
Avatar
Odpovídá na kivdul
Neaktivní uživatel:24.6.2016 15:59

Potlačí to chybové zprávy, které by následující výraz mohl vyhodit. Dokumentace říká tohle:
http://php.net/…rcontrol.php

Odpovědět 24.6.2016 15:59
Neaktivní uživatelský účet
Avatar
kivdul
Člen
Avatar
 
Odpovědět 24.6.2016 18:26
Avatar
Odpovídá na David Čápka
Pavel Habžanský:25.6.2016 18:31

Podle mě je příklad v článku v pořádku :) Příklad od "Neaktivní uživatel" je stejně jenom okopírovaný z php.net, což na jeho argumentaci ubírá na legitimitě :) Oba příklady jsou v pořádku, ale je pravda, že pomocí bindParam() ti akorát přibývají proměnné a příkazy navíc, tudíž u velké DB se to taky projeví, u používání otazníků se mohou data zpracovávat v podstatě přímo v dotazu, což je rozhodně lepší než vypisovat další příkazy a proměnné navíc, jde jen o to vědět, který otazník patří k čemu, což není takový problém, když dotyčný umí psát kód :)

Odpovědět 25.6.2016 18:31
Čím větší výzva, tím větší zkušenost
Avatar
Jan Zamecnik
Člen
Avatar
Jan Zamecnik:19.9.2016 11:47

Třídu SpravceNavstev jsem si upravil tak, že jsem přidal

private $spojeni;

public function __construct(Databaze $databaseContact) {
    $this->spojeni = $databaseContact;
}

Tj. předal jsem třídu Databaze pomocí Constructor injection. A zároveň jsem všechny dotazy upravil z

Databaze::dotaz

na

$this->spojeni->dotaz

V indexu pak mám toto:

$spojeni = new Databaze('localhost', 'root', '', 'pocitadlo_db');
     $spravce = new SpravceNavstev($spojeni);
     $spravce->zapocitej();
     $spravce->vypisStatistiky();

Doufám, že takto je to správně dle zásad OOP.

Editováno 19.9.2016 11:48
 
Odpovědět 19.9.2016 11:47
Avatar
Richard Pánek:13.5.2017 17:19

Ahojky, proč se nezadají ty přihlašovací údaje do DB přímo do té statické metody, ale vkládájí se až ve skriptu? Není to určité riziko? A nepostrádá to pak lehce smysl, když budu muset v každém skriptu znova zadat ty přihlašovací údaje, když stejně na většině hostingů je jen jedna DB a když budu chtít tu aplikaci přesunout jinam, tak to v tomhle případě budu muset přepsat ty údaje v každém skriptu, kdežto když to bude přímo v té metodě, tak to přepíšu jen tam a budu v klidu. Jestli se pletu tak mě prosím opravte někdo, pořád se učím (a nikdy nepřestanu :)) Díky.

 
Odpovědět 13.5.2017 17:19
Avatar
Odpovídá na Richard Pánek
Martin Konečný (pavelco1998):13.5.2017 21:26

Ahoj,
zde je to pouze takové ilustrativní - v reálné aplikaci to připojení k databázi budeš mít obvykle v nějakém společném souboru pro všechny stránky (buď přímo v index.php, nebo nějakém konfiguračním souboru, který se do něj vkládá).
Tudíž ty přihlašovací údaje zadáš jen v jednom souboru a skript bude k dané databázi připojen na každé stránce.

Důvod, proč nedat ty přihlašovací údaje rovnou do té metody Databaze::pripoj(), je ten, že účelem té třídy je znovupoužitelnost - tudíž by se neměla v každém jiném projektu měnit. To znamená, že proměnlivé hodnoty (právě třeba přihlašovací údaje k DB) se nebudou psát přímo do ní, ale nechají se předat parametrem. Ty tak při přesunutí webu na jiný hosting / jiného webu / změny databáze / ... nebudeš muset vůbec sahat na tu třídu Databaze, ale jen změníš ty přihlašovací údaje v parametru.

Editováno 13.5.2017 21:29
Odpovědět 13.5.2017 21:26
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Richard Pánek:16.5.2017 15:56

Aha, takže pokud to dobře chápu, tak to tam vložím jen v jednom skriptu a pak už se o to nemusím starat, protože si to z toho vytáhne samo ty údaje?

 
Odpovědět 16.5.2017 15:56
Avatar
Odpovídá na Richard Pánek
Martin Konečný (pavelco1998):16.5.2017 17:28

V podstatě pokaždé se ti bude spouštět soubor index.php, ve kterým to připojení mít budeš - takže to budeš mít jen na tom jednom místě a použije se to automaticky na všech stránkách :)

Odpovědět 16.5.2017 17:28
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Alma Mater
Člen
Avatar
Alma Mater:3.11.2017 1:23

public static function pripoj($host, $uzivatel, $heslo, $databaze)
{
if (!isset(self::$spo­jeni))
{
self::$spojeni = @new PDO(
"mysql:host=$hos­t;dbname=$data­baze",
$uzivatel,
$heslo,
self::$nastaveni
);
}
return self::$spojeni;
}

Vedel by podrobne vysvetliť niekto túto metódu,každý riadok..ďakujem.

Odpovědět 3.11.2017 1:23
Kopírovanie je forma zdieľania informácii, bez autorských práv sa informácie nezadržiavajú - šíria sa tam kde treba..
Avatar
Petr Spěvák:26.7.2018 10:00

Ahoj.
rowCount() nejspíš po SELECTu neradno používat vůbec (viz. php.net):
If the last SQL statement executed by the associated PDOStatement was a SELECT statement, some databases may return the number of rows returned by that statement. However, this behaviour is not guaranteed for all databases and should not be relied on for portable applications.

Tedy v praxi raději pouze pro zjištění počtu řádek ovlivněných příkazy INSERT, UPDATE a DELETE.

 
Odpovědět 26.7.2018 10:00
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 31 zpráv z 31.