Автор Тема: Custom PDO  (Прочетена 5651 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Custom PDO
« -: 22 Февруари 2012, 16:11:02 »
Тъй като използвам от доста време PDO,  за проект реших да си напиша мой си клас за работа с PDO
Код: PHP
  1. <?php
  2.  
  3. //custom PDO class
  4.  
  5. class MyPdo {
  6.  
  7.     //db host
  8.     private $_dbh;
  9.    
  10.     private $_stmt;
  11.     private $_queryCounter = 0;
  12.  
  13.     //constructor
  14.  
  15.     public function __construct($user, $pass, $dbname) {
  16.         $dsn = 'mysql:host=localhost;dbname=' . $dbname;
  17.         $options = array(
  18.             PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
  19.             PDO::ATTR_PERSISTENT => true);
  20.  
  21.         try {
  22.             $this->_dbh = new PDO($dsn, $user, $pass, $dbname, $options);
  23.         } catch (Exception $exc) {
  24.             echo $exc->getMessage();
  25.             exit();
  26.         }
  27.     }
  28.  
  29.     //query method
  30.  
  31.     public function prepare($query) {
  32.         $this->_stmt = $this->_dbh->prepare($query);
  33.     }
  34.  
  35.     public function bind($pos, $value, $type = null) {
  36.         if (is_null($type)) {
  37.             switch (true) {
  38.                 case is_int($value);
  39.                     $type = PDO::PARAM_INT();
  40.                     break;
  41.  
  42.                 case is_bool($value);
  43.                     $type = PDO::PARAM_BOOL();
  44.                     break;
  45.  
  46.                 case is_null($value);
  47.                     $type = PDO::PARAM_NULL();
  48.  
  49.                     break;
  50.  
  51.                 default :
  52.                     $type = PDO::PARAM_STR();
  53.             }
  54.         }
  55.         $this->_stmt->bindValue($pos, $value, $type);
  56.     }
  57.  
  58.     //execute method
  59.  
  60.     public function execute() {
  61.         $this->_queryCounter++;
  62.         return $this->_stmt->execute();
  63.     }
  64.  
  65.     // begin transaction // must be innoDatabase table
  66.  
  67.     public function beginTransaction() {
  68.         return $this->_dbh->beginTransaction();
  69.     }
  70.  
  71.     //fetch all
  72.     public function fetchAll() {
  73.         $this->execute();
  74.         return $this->_stmt->fetchAll(PDO::FETCH_ASSOC);
  75.     }
  76.  
  77.     public function fetch() {
  78.         $this->execute();
  79.         return $this->_stmt->fetch(PDO::FETCH_ASSOC);
  80.     }
  81.  
  82.     // returns last insert ID
  83.     //!!!! if called inside a transaction, must call it before closing the transaction!!!!!!
  84.     public function lastInsertId() {
  85.         return $this->_dbh->lastInsertId();
  86.     }
  87.  
  88.     // returns number of queries executed
  89.     public function queryCounter() {
  90.         return $this->_queryCounter;
  91.     }
  92.  
  93.     // cancel transaction
  94.     public function cancelTransaction() {
  95.         return $this->_dbh->rollBack();
  96.     }
  97.  
  98.     // returns number of rows updated, deleted, or inserted
  99.     public function rowCount() {
  100.         return $this->_stmt->rowCount();
  101.     }
  102.  
  103. }
  104.  
  105. ?>
  106.  
  107.  

Може да прави всички основни операции, който са ви необходими.

Конкретна имплементация
Код: PHP
  1. <?php
  2.  
  3. require 'libs/PDO.php'
  4.  
  5. //връзка с базата данни
  6.  
  7. $database = new Database('root', '', 'whatever');
  8.  
  9. //вкарваме един запис в базата данни
  10.  
  11. $database->prepare('INSERT INTO whatever (col1,col2,col3) VALUES (:name,:tag,:date)');
  12. $database->bind(':name', 'spiro spirov');
  13. $database->bind(':tag', 'hi');
  14. $database->bind(':date', 'may 1');
  15. $database->execute();
  16.  
  17. //втори запис този път с транзакции и пример на запис без да викаме prepare oтново
  18. $database->beginTransaction();
  19. $database->prepare('INSERT INTO whatever (col1,col2,col3) VALUES (:name,:tag,:date)');
  20. $database->bind(':name', 'user 1');
  21. $database->bind(':tag', 'hello');
  22. $database->bind(':date', 'may 2');
  23. $database->execute();
  24.  
  25. $database->bind(':name', 'user 2');
  26. $database->bind(':tag', 'hello 2');
  27. $database->bind(':date', 'may 22');
  28. $database->execute();
  29. $database->endTransaction();
  30.  
  31. /**
  32.  * Select от базата пример 1
  33.  */
  34. $database->prepare('SELECT col1, col2, col3 FROM whatever WHERE id > ? LIMIT ?');
  35. $database->bind(1, 1);
  36. $database->bind(2, 5);
  37. $row = $database->single();
  38. echo "<pre>";
  39. print_r($row);
  40. echo "</pre>";
  41.  
  42.  
  43. /**
  44.  *  Select oт базата пример 2
  45.  */
  46. $database->prepare('SELECT col1, col2, col3 FROM testing WHERE col2 = :col2 LIMIT :limit');
  47. $database->bind(':col2', 'hello 2');
  48. $database->bind(':limit', 10);
  49. $rs = $database->resultset();
  50.  
  51. foreach ($rs as $row) {
  52.     echo $row['col1'] . '<br>';
  53.     echo $row['col2'] . '<br>';
  54.     echo $row['col3'] . '<br>';
  55. }
  56.  
  57. ?>
  58.  

Поста стана голям. Наздраве и ако има въпроси пишете

Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Re: Custom PDO
« Отговор #1 -: 22 Февруари 2012, 16:24:21 »
Аз имам един въпрос:
Кога ще намериш повечко време та в един урок(или повече) под формата на постове да разясниш основните неща около PDO с твои думи ?  ;)

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Custom PDO
« Отговор #2 -: 22 Февруари 2012, 16:29:45 »
Ми ще се опитам да намеря. Иначе знам, че сайта е за video уроци, но малко заеквам и затова не записвам видео. Иначе ще се опитам още тази седмица да кача някой пост.  Нека админите да решат къде да ги слагам.

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Custom PDO
« Отговор #3 -: 22 Февруари 2012, 16:31:31 »
Иначе самия код не е кой знае какво. Може да се добавят още неща. Просто на мен ми върши работа и викам дай да го кача и тука

wuser

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 85
  • -Получени: 49
  • Публикации: 2761
Re: Custom PDO
« Отговор #4 -: 23 Февруари 2012, 00:03:56 »
Ами с азбучния и уанвг практикуваме те пускат във форума, ние пренасяме в джунглата, но както решиш. Уроци не връщаме.
Мъдростта на патилото
Perl Monks: PHP - it's "training wheels without the bike" -- Randal L. Schwartz


Дееба... чувствам се все едно обяснявам на майка ми как да си отвори пощата
"не работи"
WTF?!?!? к'во значи че не работи?
Не ти се компилира, дава ти грешка, вади ти грешни резултати, компютърът ти се изключва като го напишеш или на целия квартал му спира тока?
Stilgar