DatabaseObject.php (3774B) download
1<?php
2
3namespace Lollipop {
4 require_once "SQLDatabase.php";
5
6 abstract class DatabaseObject
7 {
8 protected string $table;
9 protected string $primary;
10
11 protected SQLDatabase $db;
12 protected array $data = [];
13 protected array $changed_keys = [];
14
15 function __construct(SQLDatabase $db)
16 {
17 $this->db = $db;
18 $this->primary = $this->get_primary();
19 $this->table = $this->get_table();
20 }
21
22 abstract static function get_primary(): string;
23 abstract static function get_table(): string;
24
25 public function setData($data)
26 {
27 $this->data = $data;
28 }
29 public function where(string $key, string $value)
30 {
31 $sql = "SELECT * FROM {$this->table} WHERE $key = ?";
32 $value = array($value);
33 $stmt = $this->db->conn->prepare($sql);
34 $stmt->execute($value);
35 $result = $stmt->get_result();
36 if ($result->num_rows == 0) {
37 return false;
38 }
39 $this->data = $result->fetch_assoc();
40 return true;
41 }
42
43 public function where_array(array $values) : bool
44 {
45 $sql = "SELECT * FROM {$this->table} WHERE ";
46 $params = [];
47 $i = 0;
48 foreach($values as $key => $param){
49 if($i > 0)
50 $sql .= " and ";
51 $sql .= "{$key} = ?";
52 $params[] = $param;
53 }
54
55 $stmt = $this->db->conn->prepare($sql);
56 $stmt->execute($params);
57 $result = $stmt->get_result();
58
59 if ($result->num_rows == 0) {
60 return false;
61 }
62
63 $this->data = $result->fetch_assoc();
64 return true;
65 }
66 public function load(string $id): bool
67 {
68 /*this fuction accepts an $id value for the primary key
69 * loads the row into data[]
70 * returns bool if row is found
71 */
72 $sql = "SELECT * FROM {$this->table} WHERE {$this->primary} = ?";
73
74 $stmt = $this->db->conn->prepare($sql);
75 $stmt->execute([$id]);
76 $result = $stmt->get_result();
77
78 if ($result->num_rows == 0) {
79 return false;
80 }
81
82 $this->data = $result->fetch_assoc();
83 return true;
84 }
85
86 public function save() : bool
87 {
88 if (!$this->changed_keys)
89 return false;
90
91 $sql = "UPDATE {$this->table} SET ";
92
93 $values = [];
94 foreach ($this->changed_keys as $index => $key) {
95 if ($index > 0)
96 $sql .= ', ';
97 $sql .= "$key = ?";
98 $values[] = $this->data[$key];
99 }
100
101 $sql .= " WHERE {$this->primary} = ?";
102 $values[] = $this->data[$this->primary];
103
104 $stmt = $this->db->conn->prepare($sql);
105
106 $this->changed_keys = [];
107
108 if($stmt->execute($values))
109 return true;
110 else
111 return false;
112 }
113
114 public function add() : bool
115 /* this function add the set variables to the database */
116 {
117 if (!$this->changed_keys)
118 return false;
119
120 $sql = "INSERT INTO {$this->table} (";
121 $sql_val = ") VALUES (";
122 $values = [];
123
124 foreach ($this->changed_keys as $index => $key) {
125 if ($index > 0){
126 $sql .= ', ';
127 $sql_val .= ', ';
128 }
129 $sql .= $key;
130 $sql_val .= "?";
131 $values[] = $this->data[$key];
132 }
133
134 $sql .= $sql_val . ")";
135 $stmt = $this->db->conn->prepare($sql);
136
137 $this->changed_keys = [];
138
139 if($stmt->execute($values))
140 return true;
141 else
142 return false;
143 }
144 public function delete()
145 {
146 $sql = "DELETE FROM {$this->table} WHERE {$this->primary} = ?";
147 $stmt = $this->db->conn->prepare($sql);
148 $stmt->execute([$this->data[$this->primary]]);
149 $this->data = [];
150 $this->changed_keys = [];
151 }
152
153 public function __get(string $name)
154 {
155 return $this->data[$name];
156 }
157
158 public function __set(string $name, $value)
159 {
160 $this->data[$name] = $value;
161 $this->changed_keys[] = $name;
162 }
163
164 public function getData()
165 {
166 return $this->data;
167 }
168 }
169}