Доступ к предопределенным константам PHP MySQLI через соответствующее значение? - PullRequest
1 голос
/ 30 июня 2011

Я пишу функцию, которая принимает 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];
        }
    }
}

Целое число, которое принимает $fieldType, насколько я понимаю, это ЗНАЧЕНИЕ предопределенной константы mysqli, которую можно найти здесь:http://www.php.net/manual/en/mysqli.constants.php

Я знаю, что подобный вопрос был опубликован здесь: PHP тип данных mysqli_fetch_field , но меня больше интересует сопоставление значений их соответствующим ключам.

То, что я хотел бы сделать, это привести строковое значение $curVal в правильный тип значения на основе сопоставления $fieldType с предопределенной константой mysqli.Я полагаю, что я мог бы выполнить проверку методом грубой силы для каждой предопределенной константы, или я мог бы создать ассоциативный массив со значением -> ключ вместо ключа -> значение и затем ссылаться на него, но я чувствую, что должен быть более простой способ сделать это.

Тогда мой вопрос: как проще всего найти предопределенную константу в PHP по ее значению?Получаю ли я доступ к этим предопределенным константам mysqli так же, как и к глобальным константам в PHP, или мне нужно что-то вроде $mysqli->PREDEFINED_CONSTANT?

С уважением,

Ответы [ 2 ]

4 голосов
/ 30 июня 2011

Константы не являются частью объекта, поэтому использование $ 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);
}
1 голос
/ 30 июня 2011

Есть get_defined_constants(), в котором перечислены все define() 'константы, из которых вы можете затем получить их значения.

Хотя, возникает вопрос, почему все возвращается в виде строки. Вы пытаетесь подорвать цель базы данных SQL, храня все в общей форме в одной таблице с парами value и type?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...