Controller.php
См. документацию.
1 <?php
2 
3 /**
4  * @file
5  * @brief контроллер БД запросов
6  *
7  */
8 
9 namespace Wrong\Database;
10 
11 /**
12  * @brief Controller контроллер для запросов к БД
13  *
14  */
15 
17 {
18  /** Статическое свойство, используемое для хранения имен таблиц из базы данных. */
19  public static $tables = [];
20 
21  /**
22  * принимает значение, столбец и таблицу и возвращает первую строку, которая соответствует
23  * значению в столбце
24  *
25  * @param string $value Значение для поиска.
26  * @param string $column Столбец для поиска значения.
27  * @param string $table имя таблицы
28  *
29  * @return object строки, которая соответствует значению и столбцу.
30  */
31  public static function find($value, $column = 'id', $table = '')
32  {
33  if (empty(self::$tables)) {
35  }
36  $dbh = Connect::getInstance()->dbh;
37  $table = $table ?: self::table(get_called_class());
38  if (!$table) return;
39  if (!in_array($table, self::$tables)) return;
40  $sth = $dbh->prepare("SELECT * FROM `$table` WHERE `$column` = :value");
41  $sth->bindValue(':value', $value);
42  $sth->execute();
43  return $sth->fetch();
44  }
45 
46  /**
47  * Возвращает все строки из таблицы, либо строки соответствующие значению $value для столбца $column
48  *
49  * @param string $value Значение для поиска в столбце.
50  * @param string $column Столбец для поиска значения.
51  * @param string $table Имя таблицы.
52  *
53  * @return array объектов всех строк таблицы.
54  */
55  public static function all($value = '', $column = 'id', $table = '')
56  {
57  if (empty(self::$tables)) {
59  }
60  $dbh = Connect::getInstance()->dbh;
61  $table = $table ?: self::table(get_called_class());
62  if (!in_array($table, self::$tables)) return;
63  if ($value !== '') {
64  $sth = $dbh->prepare("SELECT * FROM `$table` WHERE `$column` = :value");
65  $sth->bindValue(':value', $value);
66  } else {
67  $sth = $dbh->prepare("SELECT * FROM `$table`");
68  }
69  $sth->execute();
70  return $sth->fetchAll();
71  }
72 
73  /**
74  * возвращает количество строк в таблице, которые соответствуют заданному значению в данном
75  * столбце или количество всех строк, если значение $value не указано.
76  *
77  * @param $value Значение для поиска.
78  * @param $column Столбец для поиска значения.
79  * @param $table Имя таблицы.
80  *
81  * @return int Количество строк в таблице.
82  */
83  public static function count($value = '', $column = 'id', $table = '', $where = '')
84  {
85  if (empty(self::$tables)) {
87  }
88  $dbh = Connect::getInstance()->dbh;
89  $table = $table ?: self::table(get_called_class());
90  if (!in_array($table, self::$tables)) return;
91  if ($value !== '') {
92  $sth = $dbh->prepare("SELECT COUNT(*) FROM `$table` WHERE `$column` = :value $where");
93  $sth->bindValue(':value', $value);
94  } else {
95  $sth = $dbh->prepare("SELECT COUNT(*) FROM `$table` $where");
96  }
97  $sth->execute();
98  return $sth->fetchColumn();
99  }
100 
101  /**
102  * принимает идентификатор, имя таблицы, переключает столбец act и возвращает строку с идентификатором из таблицы с
103  * переключенным столбцом действия.
104  *
105  * @param int $id идентификатор строки, которую вы хотите переключить
106  * @param int $table имя таблицы
107  *
108  * @return object строки из таблицы соответствующий $id.
109  */
110  public static function toggle($id, $table)
111  {
112  $dbh = Connect::getInstance()->dbh;
113  $sth = $dbh->prepare("UPDATE `$table` SET `act` = IF (`act` = 1, 0, 1) WHERE `id` = :id");
114  $sth->bindValue(':id', $id);
115  $sth->execute();
116  if ($sth->rowCount()) {
117  return self::find($id, 'id', $table);
118  }
119  }
120 
121  /**
122  * берет имя класса, преобразует его в имя таблицы и возвращает имя таблицы, если оно существует
123  * в базе данных.
124  *
125  * @param string class Имя класса модели.
126  *
127  * @return string Имя таблицы класса.
128  */
129  public static function table($class)
130  {
131  if (empty(self::$tables)) {
133  }
134 
135  $table = strtolower(basename(str_replace('\\', '/', $class)));
136 
137  if (!in_array($table, self::$tables)) {
138  return;
139  }
140 
141  return $table;
142  }
143 
144  /**
145  * получает все таблицы в базе данных и сохраняет их в массиве статического свойства self::$tables
146  */
147  public static function set_tables()
148  {
149  $dbh = Connect::getInstance()->dbh;
150  self::$tables = $dbh->query("SHOW TABLES")->fetchAll(\PDO::FETCH_COLUMN);
151  }
152 
153  /**
154  * возвращает basename request запроса по id строки
155  *
156  * @param int $id Идентификатор, basename request для которого вы хотите получить.
157  *
158  * @return string basename запроса.
159  */
160  public static function name($id)
161  {
162  return basename(self::find($id)->request);
163  }
164 
165 }
if(!($row=Wrong\Models\Crontabs::find($_POST['id']))) if(! $user->access() ->write($row)) $sth
Definition: edit-cli.php:20
if(!in_array($_POST['table'], Wrong\Database\Controller::$tables)) $table
Definition: filter.php:20
static getInstance($ignore_error=false)
Definition: Connect.php:50
Controller контроллер для запросов к БД
Definition: Controller.php:17
static count($value='', $column='id', $table='', $where='')
Definition: Controller.php:83
static find($value, $column='id', $table='')
Definition: Controller.php:31
static all($value='', $column='id', $table='')
Definition: Controller.php:55
static toggle($id, $table)
Definition: Controller.php:110
$dbh
Definition: session.php:19