[ Index ] |
|
Code source de phpMyAdmin 2.10.3 |
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 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Mon Nov 26 15:18:20 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |