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

通过各自的值访问PHP MySQLI预定义常量?,php,reference,mysqli,constants,Php,Reference,Mysqli,Constants,我正在编写一个函数,它接受一个mysqli_结果,并将所有返回的列添加到结果对象中的关联数组中。到目前为止,通过mysqli::multi_查询返回的所有内容都是字符串格式的,而关于值应该是什么值类型的描述则保存在mysqli::fetch_字段返回的对象数组中。我觉得到目前为止,这是相当混乱,所以让我代码出来 if ($mysqli->multi_query($inputQuery)) { if ($result = $mysqli->store_result()) {

我正在编写一个函数,它接受一个mysqli_结果,并将所有返回的列添加到结果对象中的关联数组中。到目前为止,通过mysqli::multi_查询返回的所有内容都是字符串格式的,而关于值应该是什么值类型的描述则保存在mysqli::fetch_字段返回的对象数组中。我觉得到目前为止,这是相当混乱,所以让我代码出来

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];
        }
    }
}
据我所知,$fieldType所取的整数是预定义mysqli常量的值,可在此处找到:

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

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

那么,我的问题是,在PHP中,通过其值查找预定义常量的最简单方法是什么?我访问这些mysqli预定义常量的方式是否与在PHP中访问全局常量的方式相同,或者我必须执行类似$mysqli->预定义常量的操作

致以最诚挚的问候,

有一个get_defined_常量,它列出了所有defined'd常量,您可以从中获取它们的值

然而,这回避了一个问题:为什么一切都会以字符串的形式回来。您是否试图通过将所有内容以通用形式存储在具有值和类型对的单个表中来颠覆SQL数据库的用途?

有get_defined_常量,其中列出了所有defined'd常量,您可以从中获取它们的值


然而,这回避了一个问题:为什么一切都会以字符串的形式回来。您是否试图通过将所有内容以通用形式存储在具有值和类型对的单个表中来颠覆SQL数据库的用途?

常量不是对象的一部分,因此使用$mysqli::CONSTSANT或$mysqli->CONSTANT将无法以这种方式工作

下面是一个示例的开头。您必须查看其余部分并完成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);
}

常量不是对象的一部分,因此使用$mysqli::CONSTSANT或$mysqli->CONSTANT不会以这种方式工作

下面是一个示例的开头。您必须查看其余部分并完成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);
}

不,我不是。据我所知,从mysqli::multi_查询返回的结果并没有转换为它们正确的值类型,它们的值类型只能通过各自的字段对象进行引用。有没有一种方法可以从php文件调用MySQL数据库中的存储过程,然后返回正确的值类型?没有。据我所知,从mysqli::multi_查询返回的结果并没有转换为它们正确的值类型,它们的值类型只能通过各自的字段对象进行引用。有没有一种方法可以让我从php文件调用MySQL数据库中的存储过程,然后返回正确的值类型?我甚至没有想到,打开类型可以映射回预定义的常量键/facepalm。我将在几天内保持此状态,以查看我能得到的其他反馈,但到目前为止,我还没有想到这一点看起来正是我要找的。@MoarCodePlz-如果您阅读了文档,它会清楚地说明:mysqli_fetch_row返回一个字符串数组,该数组对应于所提取的行,如果结果集中没有更多行,则返回NULL。所有当前函数都返回字符串。我唯一能想到的办法就是按照我上面的建议去做。是的,我就是这么想的。我不知道如果所有的实现都不返回字符串,为什么它们只返回字符串。感谢您的反馈。我甚至没有想到打开类型可以映射回预定义的常量键/facepalm,我将把它打开几分钟,看看我还能得到什么反馈,但到目前为止,这似乎就是我要寻找的。@MoarCodePlz-如果您阅读文档,它清楚地指出:mysqli_fetch_row返回与获取的行相对应的字符串数组,如果结果集中没有更多行,则返回NULL。所有当前函数都返回字符串。我唯一能想到的办法就是按照我上面的建议去做。是的,我就是这么想的。我不知道如果所有的实现都不返回字符串,为什么它们只返回字符串。谢谢你的反馈。