Peršokti į turinį

PDO - Paprasta, saugu, greita (OOP)


SniuurksT

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3706 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Pastebėjau beveik niekas iš čia esančių nemoka visiškai nieko apie PDO, todėl parašau trumpą PDO pamoką.

 

 

Turbūt svarbiausias PDO pliusas yra tas, kad jog jis palaiko net 12 skirtingų db driverių.

 

Paveikslėlis aiškiai apibūdinantis PDO

pdo-to-db.png

 

PDO panaudojimas:

 

Prisijungimas (Prie MySql Driverio)

 

Prisijungime parametras "charset"nėra būtinas, bet dažniausiai naudojant lietuviškas raides, yra galimos klaidos, todėl patariu visuomet parametrą "charset" priskirti utf8.

Tai pat, norint, kad rodytu klaidas reikia priskirti PDO ATTR ERRMODE.

 

ATSIMINKITE: Jeigu naudojate localhost tuomet rašykite (127.0.0.1), o ne (localhost)

$connect = new PDO('mysql:host=MYSQL_HOSTAS;dbname=MYSQL_DB_PAVADINIMAS;charset=utf8', 'MYSQL_VARTOTOJAS', 'MYSQL_SLAPTAZODIS');
class pdo_klase{

    var $isConnected = false,
        $ConnectionError = false,
        $pdo = null;
    public function __construct(){
        try{
            $this->PDO = new PDO('mysql:host=127.0.0.1; dbname=test;charset=utf8', 'root', 'root',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
            $this->isConnected = true;
        }
        catch(PDOException $ex){
            $this->isConnected = false;
            $this->ConnectionError = $ex;
        }

    }
}

 

Taigi, sėkmingai susikūrėme prisijungimo klasę, pasirašykime duomenų bazės query metodą:

 

 

    public function pdo_query($query,$values = null){
        #Jeigu nėra $values kintamojo:
        if(!$values){
            $result = $this->PDO->query($query);
        }
        #Jeigu yra $values kintamasis
        else{
            $result = $this->PDO->query($query,$values);
        }
        #Tikrinam ar mūsų QUERY yra tinkama, jeigu tinkama, gražiname atsakymą, kitu atvėju gražiname klaidą.
        try{
            return $result;
        }
        catch(PDOException $ex){
            return $ex;
        }
    }

Panaudokime mūsų sukurta metodą

 

$informacija_is_db = $class->pdo_query("SELECT * FROM test");
#Su pdo gauti visus rezultatus yra itin paprasta, tiesiog reika paleisti foreach ciklą
foreach($informacija_is_db as $row){
    echo $row['test'];
}

Kitoje pamokoje aptarsime Prepared statmentus.

 

Galutinis failas:

<?php
class pdo_klase{

    var $isConnected = false,
        $ConnectionError = false,
        $pdo = null;
    public function __construct(){
        try{
            $this->PDO = new PDO('mysql:host=127.0.0.1; dbname=test;charset=utf8', 'root', 'root',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
            $this->isConnected = true;
        }
        catch(PDOException $ex){
            $this->isConnected = false;
            $this->ConnectionError = $ex;
        }

    }

    public function pdo_query($query,$values = null){
        #Jeigu nėra $values kintamojo:
        if(!$values){
            $result = $this->PDO->query($query);
        }
        #Jeigu yra $values kintamasis
        else{
            $result = $this->PDO->query($query,$values);
        }
        #Tikrinam ar mūsų QUERY yra tinkama, jeigu tinkama, gražiname atsakymą, kitu atvėju gražiname klaidą.
        try{
            return $result;
        }
        catch(PDOException $ex){
            return $ex;
        }
    }


}

#Paleidžiam klasę
$class = new pdo_klase();

#Patikrinam ar prisijungta prie duomenų bazės

echo $class->isConnected ? "Sėkmingai prisijungta prie duomenų bazės!" : "Prisijungti nepavyko, klaida:<br /> {$class->ConnectionError}";

$informacija_is_db = $class->pdo_query("SELECT * FROM test WHERE test = 1");
#Su pdo gauti visus rezultatus yra itin paprasta, tiesiog reika paleisti foreach ciklą
foreach($informacija_is_db as $row){
    echo $row['test'];
}


?>
Redaguota , nario *Myliu SuperGames.lt*
  • Teigiamai 1
Nuoroda į komentarą
Dalintis per kitą puslapį

Puiki pamoka, kas netingės tas mokysis. Iš tiesų mažai paprastų pamokų, scriptų su PDO. Aš asmeniškai nenaudoju OOP, net nežinau kodėl. Matyt pripratau jau prie paprasto.

 

Tai, kad PDO yra tiktais OOP, tu turbūt kalbi apie tai, kad nesikuri savo duomenų bazės klasių, o tai yra blogai (Vien tik atsižvelgiant į redagavimą, prireikus pridėti tarkim prepared statementus, tu privalėsi kiekvienoje eilutėje kur naudojamas pdo jį keist, turėdamas klasę, pakeisi tiktais klasėje)

Nuoroda į komentarą
Dalintis per kitą puslapį

Man kažkokia nesamone suo tuo PDO. ._. Padariau sistemą, bandau pajungti ant VPS'o, įkėliu, DB ir įkėliu, prisijungiu prie mySQL. Viskas pasijungia. Bet bandant prisijungti prie vartotojo sistemos, neduoda, nors ant localhosto viskas gerai....

Su mySQLi nebuvo tokiu prikolų. PDO su OOP naudojų.

Parašyk klaidą, ir duok kodo dalį kur tikrina db info.

Nuoroda į komentarą
Dalintis per kitą puslapį

$querys  =  $mysql->myQuery ( "SELECT * FROM zaidejai WHERE vardas = '".$user."' AND pass = '".$pw."'" ) ;
if ( $querys )
{
if ( $querys->rowCount() != 0 )
{
foreach ( $querys as $row )
{
$_SESSION['inSystem']  = $row['vardas'];
$_SESSION['inSystemID'] = $row['Id'] ;
}
header ( "location:../index.php" ) ;
}
else header ( "location:../index.php?act=errorNoAccount" ) ;
}
else die ( "mySQL ERROR" ) ;

Cia tikrinimas.

O Klaidos tai nera, jokios nemeta.. Teisiog pas mane padaryta jeigu vartotojo duomenys neteisingi raso "Kazkas netaip", bet idomu, ant localhosto prisijungia prie userio viskas gerai, o ant vps'o/hosto ne velnio... 

Redaguota , nario sancio__
Nuoroda į komentarą
Dalintis per kitą puslapį

$querys  =  $mysql->myQuery ( "SELECT * FROM zaidejai WHERE vardas = '".$user."' AND pass = '".$pw."'" ) ;
if ( $querys )
{
if ( $querys->rowCount() != 0 )
{
foreach ( $querys as $row )
{
$_SESSION['inSystem']  = $row['vardas'];
$_SESSION['inSystemID'] = $row['Id'] ;
}
header ( "location:../index.php" ) ;
}
else header ( "location:../index.php?act=errorNoAccount" ) ;
}
else die ( "mySQL ERROR" ) ;

Cia tikrinimas.

O Klaidos tai nera, jokios nemeta.. Teisiog pas mane padaryta jeigu vartotojo duomenys neteisingi raso "Kazkas netaip", bet idomu, ant localhosto prisijungia prie userio viskas gerai, o ant vps'o/hosto ne velnio... 

 

Mesk į try ir gaudyk klaidą:

 

try{
    $mysql->myQuery ( "SELECT * FROM zaidejai WHERE vardas = '".$user."' AND pass = '".$pw."'" );
}
catch(PDOException $ex){
    die($ex);
}
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3706 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...