Ejemplo n.º 1
0
 /**
  * @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;
 }