Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Moja klasa do obsługi MySQL pod PDO, proszę o oceny i pomysły co do zmian :)
Apocalyptiq
post
Post #1





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Witam!

Ostatnio przeszedłem z AdoDB na PDO. Napisałem (z pomocą tutejszych forumowiczów (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) taką klasę:

Kod
<?php class Database{
     protected $db;
     public function __construct(){
         $this->db=new Pdo('mysql:host=localhost;dbname=siatka','root','jo');
         $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     }
     public function sql($query,$return='exec',$binds=null){
         $sql=$this->db->prepare($query);
         if($binds!=null){
             if(is_array($binds)){
                 foreach($binds as $n => $bind)
                     $sql->bindValue(($n+1), $bind);
             } else
                 $sql->bindValue(1, $binds);
         }
         if($sql->execute()){
             # włączenie tablic jedynie asocjacyjnych
             # if($return!='exec') $sql->setFetchMode(PDO::FETCH_ASSOC);
             switch($return){
                 case 'all':
                     return $sql->fetchAll();
                     break;
                 case 'one':
                     return $sql->fetchColumn();
                     break;
                 case 'row':
                     return $sql->fetch();
                     break;
                 case 'id':
                     return $this->db->lastInsertId();
                     break;
             }
         } else
             return false;
     }
}
$db=new Database();?>

No i teraz, jeżeli np. z tabeli users chcę pobrać wiersz, gdzie login = $_POST['login'], piszę takie coś:
Kod
<?php $db->sql("SELECT * FROM users WHERE login=?","row",$_POST['login']);?>
. Dla rodzaju returnowania exec - nic nie jest zwracane. Służy to tylko do wykonywania działań na bazie: insert, update, delete.

Zamierzałem jakoś zoptymalizować tą klase - tj. rozbić jakoś rodzaj returnowania, zrobić osobne funkcje na returnowanie wiersza, wszystkiego, rekordu... Wtedy aby pobrać wiesz, napisalibyśmy np. $db->getRow("SELECT * FROM users WHERE id=1"). Proszę o jakieś pomysły jak tą klasę nieco zoptymalizować (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Może macie jakieś swoje, z których korzystacie? Albo jakieś gotowe klasy, które można pobrać z neta?

Ten post edytował nospor 17.11.2008, 13:23:37
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Apocalyptiq
post
Post #2





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


A jak to wsadzić do takiej bazy? W wikibooks widziałem zastosowanie tego exception, ale tam całe połączenie z bazą, zapytanie itp. bierze się w klamrę - a tu wszystko mam osobno, więc jak to zrobić?
Kod
    public function exec($query, $binds=null){
$sql=$this->db->prepare($query);
if($binds!==null){
if(is_array($binds)){
foreach($binds as $n => $bind)
$sql->bindValue($n+1,$bind);
} else
$sql->bindValue(1,$binds);
}
try{
$sql->execute();
}
catch(PDOException $e)
{
echo 'Wystapil blad biblioteki PDO: ' . $e->getMessage();
}
?
I do czego w ogóle służy to wypluwanie wyjątków? Teraz, jak coś jest nie tak, po prostu wywalany mam błąd, tylko że dalsza część kodu wtedy nie jest wykonywana.

Ten post edytował Apocalyptiq 17.11.2008, 20:09:41
Go to the top of the page
+Quote Post

Posty w temacie
- Apocalyptiq   [PHP]Moja klasa do obsługi MySQL pod PDO   17.11.2008, 13:08:58
- - nospor   1) uzyj poprawnego bbcode 2) Przenosze. Z mysql to...   17.11.2008, 13:18:07
- - dr_bonzo   A co jak mam inna nazwe klasy, usera, hasla?   17.11.2008, 13:21:28
- - nospor   kolejna podstawa: [PHP] pobierz, plaintext <?ph...   17.11.2008, 13:28:50
- - Apocalyptiq   No nie zbinduje :/ A znasz może jakąś gotową pros...   17.11.2008, 15:11:56
- - nospor   CytatNo nie zbinduje Zamiast $binds!=nul...   17.11.2008, 15:17:25
- - Apocalyptiq   Dzięki nospor za wskazówki, i to z bindem null J...   17.11.2008, 15:30:36
- - nospor   jedna funkcja, ktora robi wszystko to "ble...   17.11.2008, 15:34:05
- - Apocalyptiq   A jak ustawić, aby te metody korzystały z tej jedn...   17.11.2008, 16:06:57
- - dr_bonzo   Cytatczy przy każdej z tych pomniejszych metod trz...   17.11.2008, 16:35:49
- - Apocalyptiq   No ale tą klasę piszę do działania na jednej bazie...   17.11.2008, 16:48:55
- - nospor   no ale powiedzmy ze te klase dasz koledze. On bed...   17.11.2008, 17:03:01
- - erix   CytatPS. Jakby w tej klasie jeszcze coś by...   17.11.2008, 17:07:25
- - Apocalyptiq   a jak sie wypluwa wyjątki?   17.11.2008, 19:32:32
- - erix   exceptions" title="Zobacz w manualu PHP" target="_...   17.11.2008, 19:46:25
- - Apocalyptiq   A jak to wsadzić do takiej bazy? W wikibooks widzi...   17.11.2008, 19:54:08
- - megawebmaster   Bo wyjątki się wypluwa wtedy, kiedy nie może dalej...   17.11.2008, 20:23:58
- - Apocalyptiq   Zmodyfikowałem klasę co do wyjątków: Kod<?php...   18.11.2008, 11:18:35


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 22:20