PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.19.3
GiveWP – Donation Plugin and Fundraising Platform v2.19.3
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Framework / Database / DB.php
give / src / Framework / Database Last commit date
Exceptions 4 years ago DB.php 4 years ago
DB.php
217 lines
1 <?php
2
3 namespace Give\Framework\Database;
4
5 use Give\Framework\Database\Exceptions\DatabaseQueryException;
6 use Give\Framework\QueryBuilder\Clauses\RawSQL;
7 use Give\Framework\QueryBuilder\QueryBuilder;
8 use WP_Error;
9
10 /**
11 * Class DB
12 *
13 * A static decorator for the $wpdb class and decorator function which does SQL error checking when performing queries.
14 * If a SQL error occurs a DatabaseQueryException is thrown.
15 *
16 * @method static int|bool query(string $query)
17 * @method static int|false insert(string $table, array $data, array|string $format)
18 * @method static int|false delete(string $table, array $where, array|string $where_format)
19 * @method static int|false update(string $table, array $data, array $where, array|string $format, array|string $where_format)
20 * @method static int|false replace(string $table, array $data, array|string $format)
21 * @method static null|string get_var(string $query = null, int $x = 0, int $y = 0)
22 * @method static array|object|null|void get_row(string $query = null, string $output = OBJECT, int $y = 0)
23 * @method static array get_col(string $query = null, int $x = 0)
24 * @method static array|object|null get_results(string $query = null, string $output = OBJECT)
25 * @method static string get_charset_collate()
26 * @method static string esc_like(string $text)
27 * @method static string remove_placeholder_escape(string $text)
28 */
29 class DB
30 {
31 /**
32 * Runs the dbDelta function and returns a WP_Error with any errors that occurred during the process
33 *
34 * @see dbDelta() for parameter and return details
35 *
36 * @since 2.9.2
37 *
38 * @param $delta
39 *
40 * @return array
41 * @throws DatabaseQueryException
42 */
43 public static function delta($delta)
44 {
45 return self::runQueryWithErrorChecking(
46 function () use ($delta) {
47 return dbDelta($delta);
48 }
49 );
50 }
51
52 /**
53 * A convenience method for the $wpdb->prepare method
54 *
55 * @see WPDB::prepare() for usage details
56 *
57 * @since 2.9.6
58 *
59 * @param string $query
60 * @param mixed ...$args
61 *
62 * @return false|mixed
63 */
64 public static function prepare($query, ...$args)
65 {
66 global $wpdb;
67
68 return $wpdb->prepare($query, ...$args);
69 }
70
71 /**
72 * Magic method which calls the static method on the $wpdb while performing error checking
73 *
74 * @since 2.9.6
75 *
76 * @param $name
77 * @param $arguments
78 *
79 * @return mixed
80 * @throws DatabaseQueryException
81 */
82 public static function __callStatic($name, $arguments)
83 {
84 return self::runQueryWithErrorChecking(
85 function () use ($name, $arguments) {
86 global $wpdb;
87
88 return call_user_func_array([$wpdb, $name], $arguments);
89 }
90 );
91 }
92
93 /**
94 * Get last insert ID
95 *
96 * @since 2.10.0
97 * @return int
98 */
99 public static function last_insert_id()
100 {
101 global $wpdb;
102
103 return $wpdb->insert_id;
104 }
105
106 /**
107 * Prefix given table name with $wpdb->prefix
108 *
109 * @param string $tableName
110 *
111 * @return string
112 */
113 public static function prefix($tableName)
114 {
115 global $wpdb;
116
117 return $wpdb->prefix . $tableName;
118 }
119
120 /**
121 * Create QueryBuilder instance
122 *
123 * @param string $table
124 * @param null|string $alias
125 *
126 * @return QueryBuilder
127 */
128 public static function table($table, $alias = null)
129 {
130 $builder = new QueryBuilder();
131 $builder->from($table, $alias);
132
133 return $builder;
134 }
135
136
137 /**
138 * Used as a flag to tell QueryBuilder not to process the provided SQL
139 * If $args are provided, we will assume that dev wants to use DB::prepare method with raw SQL
140 *
141 * @param string $sql
142 * @param ...$args
143 *
144 * @return RawSQL
145 */
146 public static function raw($sql, ...$args)
147 {
148 return new RawSQL($sql, ...$args);
149 }
150
151 /**
152 * Runs a query callable and checks to see if any unique SQL errors occurred when it was run
153 *
154 * @since 2.9.2
155 *
156 * @param Callable $queryCaller
157 *
158 * @return mixed
159 * @throws DatabaseQueryException
160 */
161 private static function runQueryWithErrorChecking($queryCaller)
162 {
163 global $wpdb, $EZSQL_ERROR;
164 require_once ABSPATH . 'wp-admin/includes/upgrade.php';
165
166 $errorCount = is_array($EZSQL_ERROR) ? count($EZSQL_ERROR) : 0;
167 $hasShowErrors = $wpdb->hide_errors();
168
169 $output = $queryCaller();
170
171 if ($hasShowErrors) {
172 $wpdb->show_errors();
173 }
174
175 $wpError = self::getQueryErrors($errorCount);
176
177 if ( ! empty($wpError->errors)) {
178 throw DatabaseQueryException::create($wpError->get_error_messages());
179 }
180
181 return $output;
182 }
183
184 /**
185 * Retrieves the SQL errors stored by WordPress
186 *
187 * @since 2.9.2
188 *
189 * @param int $initialCount
190 *
191 * @return WP_Error
192 */
193 private static function getQueryErrors($initialCount = 0)
194 {
195 global $EZSQL_ERROR;
196
197 $wpError = new WP_Error();
198
199 if (is_array($EZSQL_ERROR)) {
200 for ($index = $initialCount, $indexMax = count($EZSQL_ERROR); $index < $indexMax; $index++) {
201 $error = $EZSQL_ERROR[$index];
202
203 if (empty($error['error_str']) || empty($error['query']) || 0 === strpos(
204 $error['query'],
205 'DESCRIBE '
206 )) {
207 continue;
208 }
209
210 $wpError->add('db_delta_error', $error['error_str']);
211 }
212 }
213
214 return $wpError;
215 }
216 }
217