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