Метаданные

Результирующий набор MySQL содержит метаданные. Эти данные описывают столбцы результирующей таблицы. Все сведения, которые передает MySQL, доступны через mysqli интерфейс. Расширение не изменяет получаемые данные, либо эти изменения незначительны. Различия между версиями MySQL также можно не принимать во внимание.

Метаданные доступны через интерфейс mysqli_result.

Пример #1 Доступ к метаданным результирующей таблицы

<?php
$mysqli 
= new mysqli("example.com""user""password""database");
if (
$mysqli->connect_errno) {
    echo 
"Не удалось подключиться к MySQL: (" $mysqli->connect_errno ") " $mysqli->connect_error;
}

$res $mysqli->query("SELECT 1 AS _one, 'Hello' AS _two FROM DUAL");
var_dump($res->fetch_fields());
?>

Результат выполнения данного примера:

array(2) {
  [0]=>
  object(stdClass)#3 (13) {
    ["name"]=>
    string(4) "_one"
    ["orgname"]=>
    string(0) ""
    ["table"]=>
    string(0) ""
    ["orgtable"]=>
    string(0) ""
    ["def"]=>
    string(0) ""
    ["db"]=>
    string(0) ""
    ["catalog"]=>
    string(3) "def"
    ["max_length"]=>
    int(1)
    ["length"]=>
    int(1)
    ["charsetnr"]=>
    int(63)
    ["flags"]=>
    int(32897)
    ["type"]=>
    int(8)
    ["decimals"]=>
    int(0)
  }
  [1]=>
  object(stdClass)#4 (13) {
    ["name"]=>
    string(4) "_two"
    ["orgname"]=>
    string(0) ""
    ["table"]=>
    string(0) ""
    ["orgtable"]=>
    string(0) ""
    ["def"]=>
    string(0) ""
    ["db"]=>
    string(0) ""
    ["catalog"]=>
    string(3) "def"
    ["max_length"]=>
    int(5)
    ["length"]=>
    int(5)
    ["charsetnr"]=>
    int(8)
    ["flags"]=>
    int(1)
    ["type"]=>
    int(253)
    ["decimals"]=>
    int(31)
  }
}

Подготавливаемые запросы

Метаданные результирующих наборов, полученных в результате выполнения подготовленных запросов, можно получить аналогичным образом. Подходящий дескриптор mysqli_result можно получить функцией mysqli_stmt_result_metadata().

Пример #2 Метаданные подготовленных запросов

<?php
$stmt 
$mysqli->prepare("SELECT 1 AS _one, 'Hello' AS _two FROM DUAL");
$stmt->execute();
$res $stmt->result_metadata();
var_dump($res->fetch_fields());
?>

См. также