/** * @static * * Do a query on the database * * @param string|array $sql The SQL to execute * @param string $error Error to throw on problems * @param null $results_error (optional) * @param null $no_results_error (optional) * * @return array|bool|mixed|null|void Result of the query * * @since 2.0 */ public static function query($sql, $error = 'Database Error', $results_error = null, $no_results_error = null) { /** * @var $wpdb wpdb */ global $wpdb; if ($wpdb->show_errors) { self::$display_errors = true; } $display_errors = self::$display_errors; if (is_object($error)) { if (isset($error->display_errors) && false === $error->display_errors) { $display_errors = false; } $error = 'Database Error'; } elseif (is_bool($error)) { $display_errors = $error; if (false !== $error) { $error = 'Database Error'; } } $params = (object) array('sql' => $sql, 'error' => $error, 'results_error' => $results_error, 'no_results_error' => $no_results_error, 'display_errors' => $display_errors); // Handle Preparations of Values (sprintf format) if (is_array($sql)) { if (isset($sql[0]) && 1 < count($sql)) { if (2 == count($sql)) { if (!is_array($sql[1])) { $sql[1] = array($sql[1]); } $params->sql = self::prepare($sql[0], $sql[1]); } elseif (3 == count($sql)) { $params->sql = self::prepare($sql[0], array($sql[1], $sql[2])); } else { $params->sql = self::prepare($sql[0], array($sql[1], $sql[2], $sql[3])); } } else { $params = array_merge($params, $sql); } if (1 == pods_var('pods_debug_sql_all', 'get', 0) && pods_is_admin(array('pods'))) { echo '<textarea cols="100" rows="24">' . str_replace(array('@wp_users', '@wp_'), array($wpdb->users, $wpdb->prefix), $params->sql) . '</textarea>'; } } $params->sql = trim($params->sql); // Run Query $params->sql = self::do_hook('query', $params->sql, $params); $result = $wpdb->query($params->sql); $result = self::do_hook('query_result', $result, $params); if (false === $result && !empty($params->error) && !empty($wpdb->last_error)) { return pods_error("{$params->error}; SQL: {$params->sql}; Response: {$wpdb->last_error}", $params->display_errors); } if ('INSERT' == strtoupper(substr($params->sql, 0, 6)) || 'REPLACE' == strtoupper(substr($params->sql, 0, 7))) { $result = $wpdb->insert_id; } elseif (preg_match('/^[\\s\\r\\n\\(]*SELECT/', strtoupper($params->sql))) { $result = (array) $wpdb->last_result; if (!empty($result) && !empty($params->results_error)) { return pods_error($params->results_error, $params->display_errors); } elseif (empty($result) && !empty($params->no_results_error)) { return pods_error($params->no_results_error, $params->display_errors); } } return $result; }