PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.18.0
GiveWP – Donation Plugin and Fundraising Platform v2.18.0
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
168 lines
1 <?php
2
3 namespace Give\Framework\Database;
4
5 use Give\Framework\Database\Exceptions\DatabaseQueryException;
6 use WP_Error;
7
8 /**
9 * Class DB
10 *
11 * A static decorator for the $wpdb class and decorator function which does SQL error checking when performing queries.
12 * If a SQL error occurs a DatabaseQueryException is thrown.
13 *
14 * @method static int|bool query(string $query)
15 * @method static int|false insert(string $table, array $data, array|string $format)
16 * @method static int|false delete(string $table, array $where, array|string $where_format)
17 * @method static int|false update(string $table, array $where, array|string $where_format)
18 * @method static int|false replace(string $table, array $data, array|string $format)
19 * @method static null|string get_var(string $query = null, int $x = 0, int $y = 0)
20 * @method static array|object|null|void get_row(string $query = null, string $output = OBJECT, int $y = 0)
21 * @method static array get_col(string $query = null, int $x = 0)
22 * @method static array|object|null get_results(string $query = null, string $output = OBJECT)
23 * @method static string get_charset_collate()
24 */
25 class DB
26 {
27 /**
28 * Runs the dbDelta function and returns a WP_Error with any errors that occurred during the process
29 *
30 * @see dbDelta() for parameter and return details
31 *
32 * @since 2.9.2
33 *
34 * @param $delta
35 *
36 * @return array
37 * @throws DatabaseQueryException
38 */
39 public static function delta($delta)
40 {
41 return self::runQueryWithErrorChecking(
42 function () use ($delta) {
43 return dbDelta($delta);
44 }
45 );
46 }
47
48 /**
49 * A convenience method for the $wpdb->prepare method
50 *
51 * @see WPDB::prepare() for usage details
52 *
53 * @since 2.9.6
54 *
55 * @param string $query
56 * @param mixed ...$args
57 *
58 * @return false|mixed
59 */
60 public static function prepare($query, ...$args)
61 {
62 global $wpdb;
63
64 return $wpdb->prepare($query, ...$args);
65 }
66
67 /**
68 * Magic method which calls the static method on the $wpdb while performing error checking
69 *
70 * @since 2.9.6
71 *
72 * @param $name
73 * @param $arguments
74 *
75 * @return mixed
76 * @throws DatabaseQueryException
77 */
78 public static function __callStatic($name, $arguments)
79 {
80 return self::runQueryWithErrorChecking(
81 function () use ($name, $arguments) {
82 global $wpdb;
83
84 return call_user_func_array([$wpdb, $name], $arguments);
85 }
86 );
87 }
88
89 /**
90 * Get last insert ID
91 *
92 * @since 2.10.0
93 * @return int
94 */
95 public static function last_insert_id()
96 {
97 global $wpdb;
98
99 return $wpdb->insert_id;
100 }
101
102 /**
103 * Runs a query callable and checks to see if any unique SQL errors occurred when it was run
104 *
105 * @since 2.9.2
106 *
107 * @param Callable $queryCaller
108 *
109 * @return mixed
110 * @throws DatabaseQueryException
111 */
112 private static function runQueryWithErrorChecking($queryCaller)
113 {
114 global $wpdb, $EZSQL_ERROR;
115 require_once ABSPATH . 'wp-admin/includes/upgrade.php';
116
117 $errorCount = is_array($EZSQL_ERROR) ? count($EZSQL_ERROR) : 0;
118 $hasShowErrors = $wpdb->hide_errors();
119
120 $output = $queryCaller();
121
122 if ($hasShowErrors) {
123 $wpdb->show_errors();
124 }
125
126 $wpError = self::getQueryErrors($errorCount);
127
128 if ( ! empty($wpError->errors)) {
129 throw DatabaseQueryException::create($wpError->get_error_messages());
130 }
131
132 return $output;
133 }
134
135 /**
136 * Retrieves the SQL errors stored by WordPress
137 *
138 * @since 2.9.2
139 *
140 * @param int $initialCount
141 *
142 * @return WP_Error
143 */
144 private static function getQueryErrors($initialCount = 0)
145 {
146 global $EZSQL_ERROR;
147
148 $wpError = new WP_Error();
149
150 if (is_array($EZSQL_ERROR)) {
151 for ($index = $initialCount, $indexMax = count($EZSQL_ERROR); $index < $indexMax; $index++) {
152 $error = $EZSQL_ERROR[$index];
153
154 if (empty($error['error_str']) || empty($error['query']) || 0 === strpos(
155 $error['query'],
156 'DESCRIBE '
157 )) {
158 continue;
159 }
160
161 $wpError->add('db_delta_error', $error['error_str']);
162 }
163 }
164
165 return $wpError;
166 }
167 }
168