PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.11.3
GiveWP – Donation Plugin and Fundraising Platform v2.11.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 5 years ago DB.php 5 years ago
DB.php
157 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 * Runs the dbDelta function and returns a WP_Error with any errors that occurred during the process
28 *
29 * @see dbDelta() for parameter and return details
30 *
31 * @since 2.9.2
32 *
33 * @param $delta
34 *
35 * @return array
36 * @throws DatabaseQueryException
37 */
38 public static function delta( $delta ) {
39 return self::runQueryWithErrorChecking(
40 function () use ( $delta ) {
41 return dbDelta( $delta );
42 }
43 );
44 }
45
46 /**
47 * A convenience method for the $wpdb->prepare method
48 *
49 * @see WPDB::prepare() for usage details
50 *
51 * @since 2.9.6
52 *
53 * @param string $query
54 * @param mixed ...$args
55 *
56 * @return false|mixed
57 */
58 public static function prepare( $query, ...$args ) {
59 global $wpdb;
60
61 return $wpdb->prepare( $query, ...$args );
62 }
63
64 /**
65 * Magic method which calls the static method on the $wpdb while performing error checking
66 *
67 * @since 2.9.6
68 *
69 * @param $name
70 * @param $arguments
71 *
72 * @return mixed
73 * @throws DatabaseQueryException
74 */
75 public static function __callStatic( $name, $arguments ) {
76 return self::runQueryWithErrorChecking(
77 function () use ( $name, $arguments ) {
78 global $wpdb;
79
80 return call_user_func_array( [ $wpdb, $name ], $arguments );
81 }
82 );
83 }
84
85 /**
86 * Get last insert ID
87 *
88 * @since 2.10.0
89 * @return int
90 */
91 public static function last_insert_id() {
92 global $wpdb;
93 return $wpdb->insert_id;
94 }
95
96 /**
97 * Runs a query callable and checks to see if any unique SQL errors occurred when it was run
98 *
99 * @since 2.9.2
100 *
101 * @param Callable $queryCaller
102 *
103 * @return mixed
104 * @throws DatabaseQueryException
105 */
106 private static function runQueryWithErrorChecking( $queryCaller ) {
107 global $wpdb, $EZSQL_ERROR;
108 require_once ABSPATH . 'wp-admin/includes/upgrade.php';
109
110 $errorCount = is_array( $EZSQL_ERROR ) ? count( $EZSQL_ERROR ) : 0;
111 $hasShowErrors = $wpdb->hide_errors();
112
113 $output = $queryCaller();
114
115 if ( $hasShowErrors ) {
116 $wpdb->show_errors();
117 }
118
119 $wpError = self::getQueryErrors( $errorCount );
120
121 if ( ! empty( $wpError->errors ) ) {
122 throw DatabaseQueryException::create( $wpError->get_error_messages() );
123 }
124
125 return $output;
126 }
127
128 /**
129 * Retrieves the SQL errors stored by WordPress
130 *
131 * @since 2.9.2
132 *
133 * @param int $initialCount
134 *
135 * @return WP_Error
136 */
137 private static function getQueryErrors( $initialCount = 0 ) {
138 global $EZSQL_ERROR;
139
140 $wpError = new WP_Error();
141
142 if ( is_array( $EZSQL_ERROR ) ) {
143 for ( $index = $initialCount, $indexMax = count( $EZSQL_ERROR ); $index < $indexMax; $index ++ ) {
144 $error = $EZSQL_ERROR[ $index ];
145
146 if ( empty( $error['error_str'] ) || empty( $error['query'] ) || 0 === strpos( $error['query'], 'DESCRIBE ' ) ) {
147 continue;
148 }
149
150 $wpError->add( 'db_delta_error', $error['error_str'] );
151 }
152 }
153
154 return $wpError;
155 }
156 }
157