[ Index ]
 

Code source de phpMyAdmin 2.10.3

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/libraries/dbi/ -> mysqli.dbi.lib.php (source)

   1  <?php
   2  /* $Id: mysqli.dbi.lib.php 10356 2007-05-08 20:39:33Z cybot_tm $ */
   3  // vim: expandtab sw=4 ts=4 sts=4:
   4  
   5  /**
   6   * Interface to the improved MySQL extension (MySQLi)
   7   */
   8  
   9  // MySQL client API
  10  if (!defined('PMA_MYSQL_CLIENT_API')) {
  11      $client_api = explode('.', mysqli_get_client_info());
  12      define('PMA_MYSQL_CLIENT_API', (int)sprintf('%d%02d%02d', $client_api[0], $client_api[1], intval($client_api[2])));
  13      unset($client_api);
  14  }
  15  
  16  // Constants from mysql_com.h of MySQL 4.1.3
  17  /**
  18   * @deprecated
  19  define('NOT_NULL_FLAG',         MYSQLI_NOT_NULL_FLAG);
  20  define('PRI_KEY_FLAG',          MYSQLI_PRI_KEY_FLAG);
  21  define('UNIQUE_KEY_FLAG',       MYSQLI_UNIQUE_KEY_FLAG);
  22  define('MULTIPLE_KEY_FLAG',     MYSQLI_MULTIPLE_KEY_FLAG);
  23  define('BLOB_FLAG',             MYSQLI_BLOB_FLAG);
  24  define('UNSIGNED_FLAG',         MYSQLI_UNSIGNED_FLAG);
  25  define('ZEROFILL_FLAG',         MYSQLI_ZEROFILL_FLAG);
  26  define('BINARY_FLAG',           MYSQLI_BINARY_FLAG);
  27  define('ENUM_FLAG',             MYSQLI_TYPE_ENUM);
  28  define('AUTO_INCREMENT_FLAG',   MYSQLI_AUTO_INCREMENT_FLAG);
  29  define('TIMESTAMP_FLAG',        MYSQLI_TIMESTAMP_FLAG);
  30  define('SET_FLAG',              MYSQLI_SET_FLAG);
  31  define('NUM_FLAG',              MYSQLI_NUM_FLAG);
  32  define('PART_KEY_FLAG',         MYSQLI_PART_KEY_FLAG);
  33  define('UNIQUE_FLAG',           MYSQLI_UNIQUE_FLAG);
  34   */
  35  
  36  /**
  37   * some older mysql client libs are missing this constants ...
  38   */
  39  if (! defined('MYSQLI_BINARY_FLAG')) {
  40     define('MYSQLI_BINARY_FLAG', 128);
  41  }
  42  
  43  /**
  44   * @see http://bugs.php.net/36007
  45   */
  46  if (! defined('MYSQLI_TYPE_NEWDECIMAL')) {
  47      define('MYSQLI_TYPE_NEWDECIMAL', 246);
  48  }
  49  if (! defined('MYSQLI_TYPE_BIT')) {
  50      define('MYSQLI_TYPE_BIT', 16);
  51  }
  52  
  53  /**
  54   * connects to the database server
  55   *
  56   * @uses    $GLOBALS['cfg']['Server']
  57   * @uses    PMA_auth_fails()
  58   * @uses    PMA_DBI_postConnect()
  59   * @uses    MYSQLI_CLIENT_COMPRESS
  60   * @uses    MYSQLI_OPT_LOCAL_INFILE
  61   * @uses    strtolower()
  62   * @uses    mysqli_init()
  63   * @uses    mysqli_options()
  64   * @uses    mysqli_real_connect()
  65   * @uses    defined()
  66   * @param   string  $user           mysql user name
  67   * @param   string  $password       mysql user password
  68   * @param   boolean $is_controluser
  69   * @return  mixed   false on error or a mysqli object on success
  70   */
  71  function PMA_DBI_connect($user, $password, $is_controluser = false)
  72  {
  73      $server_port   = (empty($GLOBALS['cfg']['Server']['port']))
  74                     ? false
  75                     : (int) $GLOBALS['cfg']['Server']['port'];
  76  
  77      if (strtolower($GLOBALS['cfg']['Server']['connect_type']) == 'tcp') {
  78          $GLOBALS['cfg']['Server']['socket'] = '';
  79      }
  80  
  81      // NULL enables connection to the default socket
  82      $server_socket = (empty($GLOBALS['cfg']['Server']['socket']))
  83                     ? null
  84                     : $GLOBALS['cfg']['Server']['socket'];
  85  
  86      $link = mysqli_init();
  87  
  88      mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, true);
  89  
  90      $client_flags = 0;
  91  
  92      /* Optionally compress connection */
  93      if ($GLOBALS['cfg']['Server']['compress'] && defined('MYSQLI_CLIENT_COMPRESS')) {
  94          $client_flags |= MYSQLI_CLIENT_COMPRESS;
  95      }
  96  
  97      /* Optionally enable SSL */
  98      if ($GLOBALS['cfg']['Server']['ssl'] && defined('MYSQLI_CLIENT_SSL')) {
  99          $client_flags |= MYSQLI_CLIENT_SSL;
 100      }
 101  
 102      $return_value = @mysqli_real_connect($link, $GLOBALS['cfg']['Server']['host'], $user, $password, false, $server_port, $server_socket, $client_flags);
 103  
 104      // Retry with empty password if we're allowed to
 105      if ($return_value == false && isset($cfg['Server']['nopassword']) && $cfg['Server']['nopassword'] && !$is_controluser) {
 106          $return_value = @mysqli_real_connect($link, $GLOBALS['cfg']['Server']['host'], $user, '', false, $server_port, $server_socket, $client_flags);
 107      }
 108  
 109      if ($return_value == false) {
 110          PMA_auth_fails();
 111      } // end if
 112  
 113      PMA_DBI_postConnect($link, $is_controluser);
 114  
 115      return $link;
 116  }
 117  
 118  /**
 119   * selects given database
 120   *
 121   * @uses    $GLOBALS['userlink']
 122   * @uses    PMA_MYSQL_INT_VERSION
 123   * @uses    PMA_convert_charset()
 124   * @uses    mysqli_select_db()
 125   * @param   string          $dbname database name to select
 126   * @param   object mysqli   $link   the mysli object
 127   * @return  boolean         treu or false
 128   */
 129  function PMA_DBI_select_db($dbname, $link = null)
 130  {
 131      if (empty($link)) {
 132          if (isset($GLOBALS['userlink'])) {
 133              $link = $GLOBALS['userlink'];
 134          } else {
 135              return false;
 136          }
 137      }
 138      if (PMA_MYSQL_INT_VERSION < 40100) {
 139          $dbname = PMA_convert_charset($dbname);
 140      }
 141      return mysqli_select_db($link, $dbname);
 142  }
 143  
 144  /**
 145   * runs a query and returns the result
 146   *
 147   * @uses    PMA_DBI_QUERY_STORE
 148   * @uses    PMA_DBI_QUERY_UNBUFFERED
 149   * @uses    PMA_MYSQL_INT_VERSION
 150   * @uses    $GLOBALS['userlink']
 151   * @uses    PMA_convert_charset()
 152   * @uses    MYSQLI_STORE_RESULT
 153   * @uses    MYSQLI_USE_RESULT
 154   * @uses    mysqli_query()
 155   * @uses    defined()
 156   * @param   string          $query      query to execute
 157   * @param   object mysqli   $link       mysqli object
 158   * @param   integer         $options
 159   * @return  mixed           true, false or result object
 160   */
 161  function PMA_DBI_try_query($query, $link = null, $options = 0)
 162  {
 163      if ($options == ($options | PMA_DBI_QUERY_STORE)) {
 164          $method = MYSQLI_STORE_RESULT;
 165      } elseif ($options == ($options | PMA_DBI_QUERY_UNBUFFERED)) {
 166          $method = MYSQLI_USE_RESULT;
 167      } else {
 168          $method = 0;
 169      }
 170  
 171      if (empty($link)) {
 172          if (isset($GLOBALS['userlink'])) {
 173              $link = $GLOBALS['userlink'];
 174          } else {
 175              return false;
 176          }
 177      }
 178      if (defined('PMA_MYSQL_INT_VERSION') && PMA_MYSQL_INT_VERSION < 40100) {
 179          $query = PMA_convert_charset($query);
 180      }
 181      return mysqli_query($link, $query, $method);
 182  
 183      // From the PHP manual:
 184      // "note: returns true on success or false on failure. For SELECT,
 185      // SHOW, DESCRIBE or EXPLAIN, mysqli_query() will return a result object"
 186      // so, do not use the return value to feed mysqli_num_rows() if it's
 187      // a boolean
 188  }
 189  
 190  /**
 191   * returns $type array of rows from given $result
 192   *
 193   * The following function is meant for internal use only.
 194   * Do not call it from outside this library!
 195   *
 196   * @uses    $GLOBALS['allow_recoding']
 197   * @uses    $GLOBALS['cfg']['AllowAnywhereRecoding']
 198   * @uses    PMA_MYSQL_INT_VERSION
 199   * @uses    PMA_DBI_get_fields_meta()
 200   * @uses    PMA_convert_display_charset()
 201   * @uses    mysqli_fetch_array()
 202   * @uses    mysqli_num_fields()
 203   * @uses    stristr()
 204   * @param   object mysqli result    $result
 205   * @param   integer                 $type   ASSOC, BOTH, or NUMERIC array
 206   * @return  array                   results
 207   * @access  protected
 208   */
 209  function PMA_mysqli_fetch_array($result, $type = false)
 210  {
 211      if ($type != false) {
 212          $data = @mysqli_fetch_array($result, $type);
 213      } else {
 214          $data = @mysqli_fetch_array($result);
 215      }
 216  
 217      /* No data returned => do not touch it */
 218      if (! $data) {
 219          return $data;
 220      }
 221  
 222      if (!defined('PMA_MYSQL_INT_VERSION') || PMA_MYSQL_INT_VERSION >= 40100
 223        || !(isset($GLOBALS['cfg']['AllowAnywhereRecoding'])
 224          && $GLOBALS['cfg']['AllowAnywhereRecoding']
 225          && $GLOBALS['allow_recoding'])) {
 226          /* No recoding -> return data as we got them */
 227          return $data;
 228      }
 229  
 230      $ret    = array();
 231      $num    = mysqli_num_fields($result);
 232      if ($num > 0) {
 233          $fields = PMA_DBI_get_fields_meta($result);
 234      }
 235      // sometimes, mysqli_fetch_fields() does not return results
 236      // (as seen in PHP 5.1.0-dev), so for now, return $data unchanged
 237      if (!$fields) {
 238          return $data;
 239      }
 240      $i = 0;
 241      for ($i = 0; $i < $num; $i++) {
 242          if (!isset($fields[$i]->type)) {
 243              /* No meta information available -> we guess that it should be
 244               * converted */
 245              if (isset($data[$i])) {
 246                  $ret[$i] = PMA_convert_display_charset($data[$i]);
 247              }
 248              if (isset($fields[$i]->name) && isset($data[$fields[$i]->name])) {
 249                  $ret[PMA_convert_display_charset($fields[$i]->name)] =
 250                      PMA_convert_display_charset($data[$fields[$i]->name]);
 251              }
 252          } else {
 253              /* Meta information available -> check type of field and convert
 254               * it according to the type */
 255              if (stristr($fields[$i]->type, 'BLOB')
 256                || stristr($fields[$i]->type, 'BINARY')) {
 257                  if (isset($data[$i])) {
 258                      $ret[$i] = $data[$i];
 259                  }
 260                  if (isset($data[$fields[$i]->name])) {
 261                      $ret[PMA_convert_display_charset($fields[$i]->name)] =
 262                          $data[$fields[$i]->name];
 263                  }
 264              } else {
 265                  if (isset($data[$i])) {
 266                      $ret[$i] = PMA_convert_display_charset($data[$i]);
 267                  }
 268                  if (isset($data[$fields[$i]->name])) {
 269                      $ret[PMA_convert_display_charset($fields[$i]->name)] =
 270                          PMA_convert_display_charset($data[$fields[$i]->name]);
 271                  }
 272              }
 273          }
 274      }
 275      return $ret;
 276  }
 277  
 278  /**
 279   * returns array of rows with associative and numeric keys from $result
 280   *
 281   * @uses    PMA_mysqli_fetch_array()
 282   * @uses    MYSQLI_BOTH
 283   * @param   object mysqli result    $result
 284   * @return  array                   result rows
 285   */
 286  function PMA_DBI_fetch_array($result)
 287  {
 288      return PMA_mysqli_fetch_array($result, MYSQLI_BOTH);
 289  }
 290  
 291  /**
 292   * returns array of rows with associative keys from $result
 293   *
 294   * @uses    PMA_mysqli_fetch_array()
 295   * @uses    MYSQLI_ASSOC
 296   * @param   object mysqli result    $result
 297   * @return  array                   result rows
 298   */
 299  function PMA_DBI_fetch_assoc($result)
 300  {
 301      return PMA_mysqli_fetch_array($result, MYSQLI_ASSOC);
 302  }
 303  
 304  /**
 305   * returns array of rows with numeric keys from $result
 306   *
 307   * @uses    PMA_mysqli_fetch_array()
 308   * @uses    MYSQLI_NUM
 309   * @param   object mysqli result    $result
 310   * @return  array                   result rows
 311   */
 312  function PMA_DBI_fetch_row($result)
 313  {
 314      return PMA_mysqli_fetch_array($result, MYSQLI_NUM);
 315  }
 316  
 317  /**
 318   * Frees the memory associated with the results
 319   *
 320   * @uses    mysqli_result
 321   * @uses    func_get_args()
 322   * @uses    is_object()
 323   * @uses    is_a()
 324   * @uses    mysqli_free_result()
 325   * @param   result  $result,...     one or more mysql result resources
 326   */
 327  function PMA_DBI_free_result()
 328  {
 329      foreach (func_get_args() as $result) {
 330          if (is_object($result)
 331            && is_a($result, 'mysqli_result')) {
 332              mysqli_free_result($result);
 333          }
 334      }
 335  }
 336  
 337  /**
 338   * Returns a string representing the type of connection used
 339   * @uses    mysqli_get_host_info()
 340   * @uses    $GLOBALS['userlink']    as default for $link
 341   * @param   resource        $link   mysql link
 342   * @return  string          type of connection used
 343   */
 344  function PMA_DBI_get_host_info($link = null)
 345  {
 346      if (null === $link) {
 347          if (isset($GLOBALS['userlink'])) {
 348              $link = $GLOBALS['userlink'];
 349          } else {
 350              return false;
 351          }
 352      }
 353      return mysqli_get_host_info($link);
 354  }
 355  
 356  /**
 357   * Returns the version of the MySQL protocol used
 358   * @uses    mysqli_get_proto_info()
 359   * @uses    $GLOBALS['userlink']    as default for $link
 360   * @param   resource        $link   mysql link
 361   * @return  integer         version of the MySQL protocol used
 362   */
 363  function PMA_DBI_get_proto_info( $link = null )
 364  {
 365      if (null === $link) {
 366          if (isset($GLOBALS['userlink'])) {
 367              $link = $GLOBALS['userlink'];
 368          } else {
 369              return false;
 370          }
 371      }
 372      return mysqli_get_proto_info($link);
 373  }
 374  
 375  /**
 376   * returns a string that represents the client library version
 377   * @uses    mysqli_get_client_info()
 378   * @return  string          MySQL client library version
 379   */
 380  function PMA_DBI_get_client_info()
 381  {
 382      return mysqli_get_client_info();
 383  }
 384  
 385  /**
 386   * returns last error message or false if no errors occured
 387   *
 388   * @uses    PMA_MYSQL_INT_VERSION
 389   * @uses    PMA_convert_display_charset()
 390   * @uses    PMA_DBI_convert_message()
 391   * @uses    $GLOBALS['errno']
 392   * @uses    $GLOBALS['userlink']
 393   * @uses    $GLOBALS['strServerNotResponding']
 394   * @uses    $GLOBALS['strSocketProblem']
 395   * @uses    mysqli_errno()
 396   * @uses    mysqli_error()
 397   * @uses    mysqli_connect_errno()
 398   * @uses    mysqli_connect_error()
 399   * @uses    defined()
 400   * @param   resource        $link   mysql link
 401   * @return  string|boolean  $error or false
 402   */
 403  function PMA_DBI_getError($link = null)
 404  {
 405      $GLOBALS['errno'] = 0;
 406  
 407      if (null === $link && isset($GLOBALS['userlink'])) {
 408          $link =& $GLOBALS['userlink'];
 409          // Do not stop now. We still can get the error code
 410          // with mysqli_connect_errno()
 411  //    } else {
 412  //        return false;
 413      }
 414  
 415      if (null !== $link) {
 416          $error_number = mysqli_errno($link);
 417          $error_message = mysqli_error($link);
 418      } else {
 419          $error_number = mysqli_connect_errno();
 420          $error_message = mysqli_connect_error();
 421      }
 422      if (0 == $error_number) {
 423          return false;
 424      }
 425  
 426      // keep the error number for further check after the call to PMA_DBI_getError()
 427      $GLOBALS['errno'] = $error_number;
 428  
 429      if (! empty($error_message)) {
 430          $error_message = PMA_DBI_convert_message($error_message);
 431      }
 432  
 433      if ($error_number == 2002) {
 434          $error = '#' . ((string) $error_number) . ' - ' . $GLOBALS['strServerNotResponding'] . ' ' . $GLOBALS['strSocketProblem'];
 435      } elseif (defined('PMA_MYSQL_INT_VERSION') && PMA_MYSQL_INT_VERSION >= 40100) {
 436          $error = '#' . ((string) $error_number) . ' - ' . $error_message;
 437      } else {
 438          $error = '#' . ((string) $error_number) . ' - ' . PMA_convert_display_charset($error_message);
 439      }
 440      return $error;
 441  }
 442  
 443  /**
 444   * closes given database $link or $GLOBALS['userlink']
 445   *
 446   * @uses    $GLOBALS['userlink']
 447   * @uses    mysqli_close()
 448   * @param   object mysqli   $link   the mysqli object
 449   * @return  boolean         treu or false
 450   */
 451  function PMA_DBI_close($link = null)
 452  {
 453      if (empty($link)) {
 454          if (isset($GLOBALS['userlink'])) {
 455              $link = $GLOBALS['userlink'];
 456          } else {
 457              return false;
 458          }
 459      }
 460      return @mysqli_close($link);
 461  }
 462  
 463  /**
 464   *
 465   * @param   object mysqli result    $result
 466   */
 467  function PMA_DBI_num_rows($result)
 468  {
 469      // see the note for PMA_DBI_try_query();
 470      if (!is_bool($result)) {
 471          return @mysqli_num_rows($result);
 472      } else {
 473          return 0;
 474      }
 475  }
 476  
 477  /**
 478   * returns last inserted auto_increment id for given $link or $GLOBALS['userlink']
 479   *
 480   * @uses    $GLOBALS['userlink']
 481   * @uses    mysqli_insert_id()
 482   * @param   object mysqli   $link   the mysqli object
 483   * @return  string ineteger
 484   */
 485  function PMA_DBI_insert_id($link = '')
 486  {
 487      if (empty($link)) {
 488          if (isset($GLOBALS['userlink'])) {
 489              $link = $GLOBALS['userlink'];
 490          } else {
 491              return false;
 492          }
 493      }
 494      return mysqli_insert_id($link);
 495  }
 496  
 497  /**
 498   * returns the number of rows affected by last query
 499   *
 500   * @uses    $GLOBALS['userlink']
 501   * @uses    mysqli_affected_rows()
 502   * @param   object mysqli   $link   the mysqli object
 503   * @return  string integer
 504   */
 505  function PMA_DBI_affected_rows($link = null)
 506  {
 507      if (empty($link)) {
 508          if (isset($GLOBALS['userlink'])) {
 509              $link = $GLOBALS['userlink'];
 510          } else {
 511              return false;
 512          }
 513      }
 514      return mysqli_affected_rows($link);
 515  }
 516  
 517  /**
 518   * returns metainfo for fields in $result
 519   *
 520   * @todo preserve orignal flags value
 521   * @uses    PMA_DBI_field_flags()
 522   * @uses    MYSQLI_TYPE_*
 523   * @uses    MYSQLI_MULTIPLE_KEY_FLAG
 524   * @uses    MYSQLI_PRI_KEY_FLAG
 525   * @uses    MYSQLI_UNIQUE_KEY_FLAG
 526   * @uses    MYSQLI_NOT_NULL_FLAG
 527   * @uses    MYSQLI_UNSIGNED_FLAG
 528   * @uses    MYSQLI_ZEROFILL_FLAG
 529   * @uses    MYSQLI_NUM_FLAG
 530   * @uses    MYSQLI_TYPE_BLOB
 531   * @uses    MYSQLI_BLOB_FLAG
 532   * @uses    defined()
 533   * @uses    mysqli_fetch_fields()
 534   * @uses    is_array()
 535   * @param   object mysqli result    $result
 536   * @return  array                   meta info for fields in $result
 537   */
 538  function PMA_DBI_get_fields_meta($result)
 539  {
 540      // Build an associative array for a type look up
 541      $typeAr = array();
 542      $typeAr[MYSQLI_TYPE_DECIMAL]     = 'real';
 543      $typeAr[MYSQLI_TYPE_NEWDECIMAL]  = 'real';
 544      $typeAr[MYSQLI_TYPE_BIT]         = 'bool';
 545      $typeAr[MYSQLI_TYPE_TINY]        = 'int';
 546      $typeAr[MYSQLI_TYPE_SHORT]       = 'int';
 547      $typeAr[MYSQLI_TYPE_LONG]        = 'int';
 548      $typeAr[MYSQLI_TYPE_FLOAT]       = 'real';
 549      $typeAr[MYSQLI_TYPE_DOUBLE]      = 'real';
 550      $typeAr[MYSQLI_TYPE_NULL]        = 'null';
 551      $typeAr[MYSQLI_TYPE_TIMESTAMP]   = 'timestamp';
 552      $typeAr[MYSQLI_TYPE_LONGLONG]    = 'int';
 553      $typeAr[MYSQLI_TYPE_INT24]       = 'int';
 554      $typeAr[MYSQLI_TYPE_DATE]        = 'date';
 555      $typeAr[MYSQLI_TYPE_TIME]        = 'time';
 556      $typeAr[MYSQLI_TYPE_DATETIME]    = 'datetime';
 557      $typeAr[MYSQLI_TYPE_YEAR]        = 'year';
 558      $typeAr[MYSQLI_TYPE_NEWDATE]     = 'date';
 559      $typeAr[MYSQLI_TYPE_ENUM]        = 'unknown';
 560      $typeAr[MYSQLI_TYPE_SET]         = 'unknown';
 561      $typeAr[MYSQLI_TYPE_TINY_BLOB]   = 'blob';
 562      $typeAr[MYSQLI_TYPE_MEDIUM_BLOB] = 'blob';
 563      $typeAr[MYSQLI_TYPE_LONG_BLOB]   = 'blob';
 564      $typeAr[MYSQLI_TYPE_BLOB]        = 'blob';
 565      $typeAr[MYSQLI_TYPE_VAR_STRING]  = 'string';
 566      $typeAr[MYSQLI_TYPE_STRING]      = 'string';
 567      // MySQL returns MYSQLI_TYPE_STRING for CHAR
 568      // and MYSQLI_TYPE_CHAR === MYSQLI_TYPE_TINY
 569      // so this would override TINYINT and mark all TINYINT as string
 570      // https://sf.net/tracker/?func=detail&aid=1532111&group_id=23067&atid=377408
 571      //$typeAr[MYSQLI_TYPE_CHAR]        = 'string';
 572      $typeAr[MYSQLI_TYPE_GEOMETRY]    = 'unknown';
 573  
 574      $fields = mysqli_fetch_fields($result);
 575  
 576      // this happens sometimes (seen under MySQL 4.0.25)
 577      if (!is_array($fields)) {
 578          return false;
 579      }
 580  
 581      foreach ($fields as $k => $field) {
 582          $fields[$k]->_type = $field->type;
 583          $fields[$k]->type = $typeAr[$field->type];
 584          $fields[$k]->_flags = $field->flags;
 585          $fields[$k]->flags = PMA_DBI_field_flags($result, $k);
 586  
 587          // Enhance the field objects for mysql-extension compatibilty
 588          //$flags = explode(' ', $fields[$k]->flags);
 589          //array_unshift($flags, 'dummy');
 590          $fields[$k]->multiple_key
 591              = (int) (bool) ($fields[$k]->_flags & MYSQLI_MULTIPLE_KEY_FLAG);
 592          $fields[$k]->primary_key
 593              = (int) (bool) ($fields[$k]->_flags & MYSQLI_PRI_KEY_FLAG);
 594          $fields[$k]->unique_key
 595              = (int) (bool) ($fields[$k]->_flags & MYSQLI_UNIQUE_KEY_FLAG);
 596          $fields[$k]->not_null
 597              = (int) (bool) ($fields[$k]->_flags & MYSQLI_NOT_NULL_FLAG);
 598          $fields[$k]->unsigned
 599              = (int) (bool) ($fields[$k]->_flags & MYSQLI_UNSIGNED_FLAG);
 600          $fields[$k]->zerofill
 601              = (int) (bool) ($fields[$k]->_flags & MYSQLI_ZEROFILL_FLAG);
 602          $fields[$k]->numeric
 603              = (int) (bool) ($fields[$k]->_flags & MYSQLI_NUM_FLAG);
 604          $fields[$k]->blob
 605              = (int) (bool) ($fields[$k]->_flags & MYSQLI_BLOB_FLAG);
 606      }
 607      return $fields;
 608  }
 609  
 610  /**
 611   * return number of fields in given $result
 612   *
 613   * @param   object mysqli result    $result
 614   * @return  integer                 field count
 615   */
 616  function PMA_DBI_num_fields($result)
 617  {
 618      return mysqli_num_fields($result);
 619  }
 620  
 621  /**
 622   * returns the length of the given field $i in $result
 623   *
 624   * @uses    mysqli_fetch_field_direct()
 625   * @param   object mysqli result    $result
 626   * @param   integer                 $i      field
 627   * @return  integer                 length of field
 628   */
 629  function PMA_DBI_field_len($result, $i)
 630  {
 631      $info = mysqli_fetch_field_direct($result, $i);
 632      // stdClass::$length will be integrated in
 633      // mysqli-ext when mysql4.1 has been released.
 634      return @$info->length;
 635  }
 636  
 637  /**
 638   * returns name of $i. field in $result
 639   *
 640   * @uses    mysqli_fetch_field_direct()
 641   * @param   object mysqli result    $result
 642   * @param   integer                 $i      field
 643   * @return  string                  name of $i. field in $result
 644   */
 645  function PMA_DBI_field_name($result, $i)
 646  {
 647      $info = mysqli_fetch_field_direct($result, $i);
 648      return $info->name;
 649  }
 650  
 651  /**
 652   * returns concatenated string of human readable field flags
 653   *
 654   * @uses    MYSQLI_UNIQUE_KEY_FLAG
 655   * @uses    MYSQLI_NUM_FLAG
 656   * @uses    MYSQLI_PART_KEY_FLAG
 657   * @uses    MYSQLI_TYPE_SET
 658   * @uses    MYSQLI_TIMESTAMP_FLAG
 659   * @uses    MYSQLI_AUTO_INCREMENT_FLAG
 660   * @uses    MYSQLI_TYPE_ENUM
 661   * @uses    MYSQLI_BINARY_FLAG
 662   * @uses    MYSQLI_ZEROFILL_FLAG
 663   * @uses    MYSQLI_UNSIGNED_FLAG
 664   * @uses    MYSQLI_BLOB_FLAG
 665   * @uses    MYSQLI_MULTIPLE_KEY_FLAG
 666   * @uses    MYSQLI_UNIQUE_KEY_FLAG
 667   * @uses    MYSQLI_PRI_KEY_FLAG
 668   * @uses    MYSQLI_NOT_NULL_FLAG
 669   * @uses    mysqli_fetch_field_direct()
 670   * @uses    PMA_convert_display_charset()
 671   * @param   object mysqli result    $result
 672   * @param   integer                 $i      field
 673   * @return  string                  field flags
 674   */
 675  function PMA_DBI_field_flags($result, $i)
 676  {
 677      $f = mysqli_fetch_field_direct($result, $i);
 678      $f = $f->flags;
 679      $flags = '';
 680      if ($f & MYSQLI_UNIQUE_KEY_FLAG)     { $flags .= 'unique ';}
 681      if ($f & MYSQLI_NUM_FLAG)            { $flags .= 'num ';}
 682      if ($f & MYSQLI_PART_KEY_FLAG)       { $flags .= 'part_key ';}
 683      if ($f & MYSQLI_TYPE_SET)            { $flags .= 'set ';}
 684      if ($f & MYSQLI_TIMESTAMP_FLAG)      { $flags .= 'timestamp ';}
 685      if ($f & MYSQLI_AUTO_INCREMENT_FLAG) { $flags .= 'auto_increment ';}
 686      if ($f & MYSQLI_TYPE_ENUM)           { $flags .= 'enum ';}
 687      // @TODO seems to be outdated
 688      if ($f & MYSQLI_BINARY_FLAG)         { $flags .= 'binary ';}
 689      if ($f & MYSQLI_ZEROFILL_FLAG)       { $flags .= 'zerofill ';}
 690      if ($f & MYSQLI_UNSIGNED_FLAG)       { $flags .= 'unsigned ';}
 691      if ($f & MYSQLI_BLOB_FLAG)           { $flags .= 'blob ';}
 692      if ($f & MYSQLI_MULTIPLE_KEY_FLAG)   { $flags .= 'multiple_key ';}
 693      if ($f & MYSQLI_UNIQUE_KEY_FLAG)     { $flags .= 'unique_key ';}
 694      if ($f & MYSQLI_PRI_KEY_FLAG)        { $flags .= 'primary_key ';}
 695      if ($f & MYSQLI_NOT_NULL_FLAG)       { $flags .= 'not_null ';}
 696      return PMA_convert_display_charset(trim($flags));
 697  }
 698  
 699  ?>


Généré le : Mon Nov 26 15:18:20 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics