Вход Регистрация
* АрхангеЛ

Класс для работы с PDO

  1. class Db {
  2.  
  3. private $db;
  4. public function __construct($db) {
  5. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6. $this->db = $db;
  7. }
  8.  
  9. public function insert($table, $fields, $insertParams = null) {
  10. try {
  11. $result = null;
  12. $names = '';
  13. $vals = '';
  14. foreach ($fields as $name => $val) {
  15. if (isset($names[0])) {
  16. $names .= ', ';
  17. $vals .= ', ';
  18. }
  19. $names .= $name;
  20. $vals .= ':' . $name;
  21. }
  22. $ignore = isset($insertParams['ignore']) && $insertParams['ignore']? 'IGNORE': '';
  23. $sql = "INSERT $ignore INTO " . $table . ' (' . $names . ') VALUES (' . $vals . ')';
  24. $rs = $this->db->prepare($sql);
  25. foreach ($fields as $name => $val) {
  26. $rs->bindValue(':' . $name, $val);
  27. }
  28. if ($rs->execute()) {
  29. $result = $this->db->lastInsertId(null);
  30. }
  31. return $result;
  32. } catch(Exception $e) {
  33. $this->report($e);
  34. }
  35. }
  36.  
  37. // Returns true/false
  38. public function update($table, $fields, $where, $params = null) {
  39. try {
  40. $sql = 'UPDATE ' . $table . ' SET ';
  41. $first = true;
  42. foreach (array_keys($fields) as $name) {
  43. if (!$first) {
  44. $first = false;
  45. $sql .= ', ';
  46. }
  47. $first = false;
  48. $sql .= $name . ' = :_' . $name;
  49. }
  50. if (!is_array($params)) {
  51. $params = array();
  52. }
  53. $sql .= ' WHERE ' . $where;
  54. $rs = $this->db->prepare($sql);
  55. foreach ($fields as $name => $val) {
  56. $params[':_' . $name] = $val;
  57. }
  58. $result = $rs->execute($params);
  59. return $result;
  60. } catch(Exception $e) {
  61. $this->report($e);
  62. }
  63. }
  64.  
  65. // Returns true/false
  66. public function delete($table, $where, $params = null) {
  67. try {
  68. $sql = 'DELETE FROM ' . $table;
  69. $sql .= ' WHERE ' . $where;
  70. $rs = $this->db->prepare($sql);
  71. foreach ($fields as $name => $val) {
  72. $params[':_' . $name] = $val;
  73. }
  74. $result = $rs->execute($params);
  75. return $result;
  76. } catch(Exception $e) {
  77. $this->report($e);
  78. }
  79. }
  80.  
  81. public function queryValue($query, $params = null) {
  82. try {
  83. $result = null;
  84. $stmt = $this->db->prepare($query);
  85. if ($stmt->execute($params)) {
  86. $result = $stmt->fetchColumn();
  87. $stmt->closeCursor();
  88. }
  89. return $result;
  90. } catch(Exception $e) {
  91. $this->report($e);
  92. }
  93. }
  94.  
  95. public function queryValues($query, $params = null) {
  96. try {
  97. $result = null;
  98. $stmt = $this->db->prepare($query);
  99. if ($stmt->execute($params)) {
  100. $result = array();
  101. while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
  102. $result[] = $row[0];
  103. }
  104. }
  105. return $result;
  106. } catch(Exception $e) {
  107. $this->report($e);
  108. }
  109. }
  110.  
  111. public function queryRow($query, $params = null, $fetchStyle = PDO::FETCH_ASSOC, $classname = null) {
  112. $rows = $this->queryRowOrRows(true, $query, $params, $fetchStyle, $classname);
  113. return $rows;
  114. }
  115.  
  116. public function queryRows($query, $params = null, $fetchStyle = PDO::FETCH_ASSOC, $classname = null) {
  117. $rows = $this->queryRowOrRows(false, $query, $params, $fetchStyle, $classname);
  118. return $rows;
  119. }
  120.  
  121. private function queryRowOrRows($singleRow, $query, $params = null, $fetchStyle = PDO::FETCH_ASSOC, $classname = null) {
  122. try {
  123. $result = null;
  124. $stmt = $this->db->prepare($query);
  125. if($classname) {
  126. $stmt->setFetchMode($fetchStyle, $classname);
  127. } else {
  128. $stmt->setFetchMode($fetchStyle);
  129. }
  130. if ($stmt->execute($params)) {
  131. $result = $singleRow? $stmt->fetch(): $stmt->fetchAll();
  132. $stmt->closeCursor();
  133. }
  134. return $result;
  135. } catch(Exception $e) {
  136. $this->report($e);
  137. }
  138. }
  139.  
  140. public function quote($str) {
  141. return $this->db->quote($str);
  142. }
  143.  
  144. public function quoteArray($arr) {
  145. $result = array();
  146. foreach ($arr as $val) {
  147. $result[] = $this->db->quote($val);
  148. }
  149. return $result;
  150. }
  151.  
  152. public function quoteImplodeArray($arr) {
  153. return implode(',', $this->quoteArray($arr));
  154. }
  155.  
  156. // returns true/false
  157. public function sql($query, $params = null) {
  158. try {
  159. $result = null;
  160. $stmt = $this->db->prepare($query);
  161. return $stmt->execute($params);
  162. } catch(Exception $e) {
  163. $this->report($e);
  164. }
  165. }
  166.  
  167. private function report($e) {
  168. throw $e;
  169. }
  170.  
  171. }
  172.  
  173. //Данные базы
  174. $dsn = 'mysql:host=localhost;dbname=dn_name;charset=utf8';
  175. $user = 'user';
  176. $password = 'password';
  177.  
  178. //Подключение к базе
  179. $pdo = new PDO($dsn, $user, $password);
  180. $db = new Db($pdo);
  181.  
  182.  
  183.  
  184.  
  185. //////////////////////////
  186. // Использование ///
  187. //////////////////////////
  188.  
  189. // Добавление записи (INSERT) и получение значения поля AUTO_INCREMENT
  190. $db->insert('test', array('name' => 'NewUserName', 'type' => '1', 'time' => time()));
  191.  
  192. // Изменение записи (UPDATE)
  193. $db->update('test', array('name' => 'UpdatedName'), 'id=:id', array(':id' => $id));
  194.  
  195. //Удаление записи
  196. $db->delete('test', 'id=:id', array(':id' => $id));
  197.  
  198. // Выборка одного значения
  199. $count = $db->queryValue('SELECT COUNT(*) FROM `test`');
  200.  
  201. // Выборка набора записей
  202. $users = $db->queryRows('SELECT * FROM `users` WHERE name LIKE ?', array('%username%'));
  203.  
  204. //Вывод записей
  205. foreach($db->queryRows("SELECT * FROM `test`") AS $user) {
  206. echo $user['user'] . '</br>';}
» Описание: Нашёл в интернете интересный класс для работы с PDO, доработал его не много, сокращаем код по минимуму весь основной код внутри класса. Вообщем пользуйтесь кому надо =)
» Время добавления: 18 Июля 2017 в 09:22
» Посмотров: 4852
» textarea
» Рейтинг: [+6 | -2]
Комментарии [6]
Онлайн: 0
Реклама