通过各自的值访问 PHP MySQLI 预定义常量?

Moa*_*Plz 1 php mysqli reference constants

我正在编写一个函数,它接受一个 mysqli_result 并将所有返回的列添加到我的结果对象中的关联数组中。到目前为止,通过 mysqli::multi_query 返回的所有内容都是字符串格式,而关于该值应该是什么值类型的描述保存在 mysqli::fetch_fields 返回的对象数组中。我觉得到目前为止这很令人困惑所以让我把它编码出来

if ($mysqli->multi_query($inputQuery)) {
    if ($result = $mysqli->store_result()) {
        //$fields is an array of custom objects
        $fields = $result->fetch_fields();

        //$fieldType is an integer that is the value of a mysqli predefined constant
        $fieldType = $fields[0]->type;

        if ($curRow = $result->fetch_row()) {
            //No matter what the value type in the database of this item is, and no
            //matter what $fieldType corresponds to, $curVal is going to be a string
            $curVal = $curRow[0];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

根据$fieldType我的理解,这个整数是一个预定义的 mysqli 常量的值,可以在这里找到:http : //www.php.net/manual/en/mysqli.constants.php

我知道这里发布了一个类似的问题:PHP mysqli_fetch_field data type但我更感兴趣的是将值映射回它们各自的键。

我想要做的是$curVal根据映射$fieldType到 mysqli 预定义常量将字符串值转换为正确的值类型。我想我可以对每个预定义的常量进行强力检查,或者我可以创建一个关联数组,其中包含 value -> key 而不是 key -> value 然后引用它,但我觉得应该有一种更简单的方法来解决这个问题.

那么,我的问题是,在 PHP 中通过其值查找预定义常量的最简单方法是什么?我是像访问 PHP 中的全局常量一样访问这些 mysqli 预定义常量,还是必须执行类似的操作$mysqli->PREDEFINED_CONSTANT

此致,

Fra*_*nes 5

常量不是对象的一部分,因此使用 $mysqli::CONSTSANT 或 $mysqli->CONSTANT 不会那样工作。

这是一个例子的开始。您必须查看其余的MySQLi 常量并完成该switch语句。未包含的将保留为字符串。

$result = $mysqli->query('SELECT * FROM `accounts`');
$fields = $result->fetch_fields();

// Loop through each row.
while ( $row = $result->fetch_row() )
{
  // Loop through each field.
  foreach ( $row as $key => &$value )
  {
    // Using the $key, find the type of the current field.
    switch ( $fields[$key]->type )
    {
      // Convert INT to an integer.
      case MYSQLI_TYPE_TINY:
      case MYSQLI_TYPE_SHORT:
      case MYSQLI_TYPE_LONG:
      case MYSQLI_TYPE_LONGLONG:
      case MYSQLI_TYPE_INT24:
        $value = intval($value);

        break;
      // Convert FLOAT to a float.
      case MYSQLI_TYPE_FLOAT:
      case MYSQLI_TYPE_DOUBLE:
        $value = floatval($value);

        break;
      // Convert TIMESTAMP to a DateTime object.
      case MYSQLI_TYPE_TIMESTAMP:
      case MYSQLI_TYPE_DATE:
      case MYSQLI_TYPE_DATETIME:
        $value = new DateTime($value);

        break;
    }
  }

  var_dump($row);
}
Run Code Online (Sandbox Code Playgroud)