· 5 years ago · Feb 05, 2020, 02:54 PM
1<?php
2
3namespace Application\Utility;
4
5use \Zend\Db\Adapter\Adapter;
6
7abstract class AdapterRecord
8{
9
10 /**
11 * Адаптер для подключения к БД.
12 *
13 * @access private
14 */
15 private $adapter;
16
17
18 /*
19 * Сохраненния данных в бд
20 *
21 * @param array $request
22 *
23 * @return @object
24 * */
25 public function save(array $request)
26 {
27 if (empty($request))
28 return false;
29
30 //Адаптер для подключения к БД.
31 $this->connection();
32
33 foreach ($request as $request_key => $request_value) {
34 $res[$request_key] = is_null($request_value) ? "NULL" : "'" . addslashes($request_value) . "'";
35 }
36
37 //разбиваем на key => value
38 $request_keys = implode(', ', array_keys($res));
39 $request_values = implode(', ', array_values($res));
40
41 $query = "INSERT INTO {$this->getEntity()} ({$request_keys}) VALUES ({$request_values})";
42
43 return $this->adapter->query($query, Adapter::QUERY_MODE_EXECUTE);
44
45 }
46
47 /*
48 * Получаем все данные с бд
49 *
50 * @param string options
51 *
52 * @return object
53 * */
54 public function getAll($options = null)
55 {
56 //Адаптер для подключения к БД.
57 $this->connection();
58
59 $query = "SELECT * FROM {$this->getEntity()}";
60
61 ($options !== null) ? $query .= " {$options}" : $query;
62
63 return $this->adapter->query($query, Adapter::QUERY_MODE_EXECUTE);
64 }
65
66 /*
67 * Создаем таблицу в бд
68 *
69 * @param array $request
70 *
71 * @return object
72 * */
73 public function createTable(array $request)
74 {
75 if (empty($request))
76 return false;
77
78 //Адаптер для подключения к БД.
79 $this->connection();
80
81 foreach ($request as $request_key => $request_value) {
82 $res[$request_key] = is_null($request_value) ? "NULL" : "'" . addslashes($request_value) . "'";
83 }
84
85 $request_values = implode(', ', array_values($res));
86
87 $query = "CREATE TABLE IF NOT EXISTS {$this->getEntity()} (
88 {$request_values}
89 ) ENGINE=InnoDB DEFAULT CHARSET=utf8";
90
91 return $this->adapter->query($query, Adapter::QUERY_MODE_EXECUTE);
92 }
93
94 /*
95 * Настройки подключения к бд
96 *
97 * @return boolean
98 * */
99 private function connection()
100 {
101 try {
102 $this->adapter = new Adapter([
103 'driver' => 'Mysqli',
104 'database' => 'cantit',
105 'username' => 'root',
106 'password' => 'pass'
107 ]);
108 } catch (\Exception $e) {
109 var_dump($e->getMessage());
110 return false;
111 }
112 return true;
113 }
114
115 /*
116 * Возвращаем текущее имя класса
117 *
118 * @return boolean
119 * */
120 private function getEntity()
121 {
122 $currentClassName = substr(strrchr(get_class($this), "\\"), 1);
123
124 return strtolower($currentClassName);
125 }
126
127
128}