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
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
No nie zbinduje

Zamiast $binds!=null
daj: $binds!==null
i juz zbinduje

Cytat
A znasz może jakąś gotową prostą bibliotekę (klasę) do obsługi PDO

PDO samo w sobie jest klasą i nadaje sie do uzywania.
Jedyna nakładkę jaką widziałem była napisana przez Zyx ale nie jest juz rozwijana bo ktos wydal podobno lepszą (o czym sam pisał Zyx).
Ja używam własnej, ale mocno zintegrowanej z moim systemem, wiec nic tu po niej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
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: 6.10.2025 - 08:51