在 MySQLi 中查找实际数据类型

tik*_*ika 2 php mysqli

我试图找出:

  1. 数据类型
  2. 长度

PHP 表中的列。我注意到我可以从INFORMATION_SCHEMA我自己的桌子上做到这一点:

$query = $link->query("SELECT * FROM `events` LIMIT 1");
$row = mysqli_fetch_fields($query);
foreach($row as $field){
    print_r($field);
}
Run Code Online (Sandbox Code Playgroud)

响应绝对是一个数组。我几乎发现了一切:

( 
    [name] => id 
    [orgname] => id 
    [table] => events 
    [orgtable] => events 
    [def] => 
    [db] => myliveca_baikalpik 
    [catalog] => def 
    [max_length] => 1 
    [length] => 11 
    [charsetnr] => 63 
    [flags] => 49667 
    [type] => 3 
    [decimals] => 0 
) 
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有length数据,但数据类型似乎仍然被编码(或其他)以数字表示:

  • 3 为整数
  • 11 时间
  • 252 用于文本

我如何回溯这个?

Whi*_*ind 5

您可能正在寻找预定义的 mysqli 常量

["MYSQLI_TYPE_DECIMAL"]=>
  int(0)
  ["MYSQLI_TYPE_TINY"]=>
  int(1)
  ["MYSQLI_TYPE_SHORT"]=>
  int(2)
  ["MYSQLI_TYPE_LONG"]=>
  int(3)
  ["MYSQLI_TYPE_FLOAT"]=>
  int(4)
  ["MYSQLI_TYPE_DOUBLE"]=>
  int(5)
  ["MYSQLI_TYPE_NULL"]=>
  int(6)
  ["MYSQLI_TYPE_TIMESTAMP"]=>
  int(7)
  ["MYSQLI_TYPE_LONGLONG"]=>
  int(8)
  ["MYSQLI_TYPE_INT24"]=>
  int(9)
  ["MYSQLI_TYPE_DATE"]=>
  int(10)
  ["MYSQLI_TYPE_TIME"]=>
  int(11)
  ["MYSQLI_TYPE_DATETIME"]=>
  int(12)
  ["MYSQLI_TYPE_YEAR"]=>
  int(13)
  ["MYSQLI_TYPE_NEWDATE"]=>
  int(14)
  ["MYSQLI_TYPE_ENUM"]=>
  int(247)
  ["MYSQLI_TYPE_SET"]=>
  int(248)
  ["MYSQLI_TYPE_TINY_BLOB"]=>
  int(249)
  ["MYSQLI_TYPE_MEDIUM_BLOB"]=>
  int(250)
  ["MYSQLI_TYPE_LONG_BLOB"]=>
  int(251)
  ["MYSQLI_TYPE_BLOB"]=>
  int(252)
  ["MYSQLI_TYPE_VAR_STRING"]=>
  int(253)
  ["MYSQLI_TYPE_STRING"]=>
  int(254)
  ["MYSQLI_TYPE_CHAR"]=>
  int(1)
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令查找所有预定义常量的值:

<?php

echo "<pre>";
   var_dump(get_defined_constants());
echo "</pre>";
?>
Run Code Online (Sandbox Code Playgroud)