PDOStatement::getColumnMeta

Baixar o driver PHP

Recupera metadados para uma coluna.

Sintaxe

  
array PDOStatement::getColumnMeta ( $column );  

Parâmetros

$conn: (inteiro) o número da coluna, com base em zero, cujos metadados você deseja recuperar.

Valor de retorno

Uma matriz associativa (chave e valor) que contém os metadados da coluna. Consulte a seção de comentários para obter uma descrição dos campos na matriz.

Comentários

A tabela a seguir descreve os campos na matriz retornada por getColumnMeta.

NOME VALUES
native_type Especifica o tipo do PHP para a coluna. Sempre cadeia de caracteres.
driver:decl_type Especifica o tipo do SQL usado para representar o valor da coluna no banco de dados. Se a coluna no conjunto de resultados é o resultado de uma função, esse valor não é retornado por PDOStatement::getColumnMeta.
sinalizadores Especifica os sinalizadores definidos para essa coluna. Sempre 0.
name Especifica o nome da coluna no banco de dados.
table Especifica o nome da tabela que contém a coluna no banco de dados. Sempre em branco.
len Especifica o comprimento da coluna.
precisão Especifica a precisão numérica dessa coluna.
pdo_type Especifica o tipo desta coluna, conforme representado pelas constantes PDO::PARAM_ *. Sempre PDO::PARAM_STR (2).

O suporte para PDO foi adicionado na versão 2.0 dos Drivers da Microsoft para PHP para SQL Server.

Exemplo

<?php  
$database = "AdventureWorks";  
$server = "(local)";  
$conn = new PDO( "sqlsrv:server=$server ; Database = $database", "", "");  
  
$stmt = $conn->query("select * from Person.ContactType");  
$metadata = $stmt->getColumnMeta(2);  
var_dump($metadata);  
  
print $metadata['sqlsrv:decl_type'] . "\n";  
print $metadata['native_type'] . "\n";  
print $metadata['name'];  
?>  

Metadados de classificação de dados de confidencialidade

A partir da versão 5.8.0, um novo atributo de instrução PDO::SQLSRV_ATTR_DATA_CLASSIFICATION está disponível para os usuários acessarem os metadados de classificação de dados de confidencialidade no Microsoft SQL Server 2019 usando o PDOStatement::getColumnMeta, que requer o Microsoft ODBC Driver 17.4.2 ou posterior.

Observe que o atributo PDO::SQLSRV_ATTR_DATA_CLASSIFICATION é false por padrão, porém, quando definido como true, o campo de matriz mencionado anteriormente, flags, será preenchido com os metadados de classificação de dados de confidencialidade, se existirem.

Pegue a tabela de Pacientes, por exemplo:

CREATE TABLE Patients 
      [PatientId] int identity,
      [SSN] char(11),
      [FirstName] nvarchar(50),
      [LastName] nvarchar(50),
      [BirthDate] date)

Podemos classificar as colunas SSN e BirthDate, como mostrado abaixo:

ADD SENSITIVITY CLASSIFICATION TO [Patients].SSN WITH (LABEL = 'Highly Confidential - secure privacy', INFORMATION_TYPE = 'Credentials')
ADD SENSITIVITY CLASSIFICATION TO [Patients].BirthDate WITH (LABEL = 'Confidential Personal Data', INFORMATION_TYPE = 'Birthdays')

Para acessar os metadados, use PDOStatement::getColumnMeta depois de definir PDO::SQLSRV_ATTR_DATA_CLASSIFICATION como true, como mostrado no seguinte trecho:

$options = array(PDO::SQLSRV_ATTR_DATA_CLASSIFICATION => true);
$tableName = 'Patients';
$tsql = "SELECT * FROM $tableName";
$stmt = $conn->prepare($tsql, $options);
$stmt->execute();
$numCol = $stmt->columnCount();

for ($i = 0; $i < $numCol; $i++) {
    $metadata = $stmt->getColumnMeta($i);
    $jstr = json_encode($metadata);
    echo $jstr . PHP_EOL;
}

A saída de metadados para todas as colunas é:

{"flags":{"Data Classification":[]},"sqlsrv:decl_type":"int identity","native_type":"string","table":"","pdo_type":2,"name":"PatientId","len":10,"precision":0}
{"flags":{"Data Classification":[{"Label":{"name":"Highly Confidential - secure privacy","id":""},"Information Type":{"name":"Credentials","id":""}}]},"sqlsrv:decl_type":"char","native_type":"string","table":"","pdo_type":2,"name":"SSN","len":11,"precision":0}
{"flags":{"Data Classification":[]},"sqlsrv:decl_type":"nvarchar","native_type":"string","table":"","pdo_type":2,"name":"FirstName","len":50,"precision":0}
{"flags":{"Data Classification":[]},"sqlsrv:decl_type":"nvarchar","native_type":"string","table":"","pdo_type":2,"name":"LastName","len":50,"precision":0}
{"flags":{"Data Classification":[{"Label":{"name":"Confidential Personal Data","id":""},"Information Type":{"name":"Birthdays","id":""}}]},"sqlsrv:decl_type":"date","native_type":"string","table":"","pdo_type":2,"name":"BirthDate","len":10,"precision":0}

Se modificarmos o trecho acima definindo PDO::SQLSRV_ATTR_DATA_CLASSIFICATION como false (o caso padrão), o campo flags sempre será 0 como antes, desta forma:

{"flags":0,"sqlsrv:decl_type":"int identity","native_type":"string","table":"","pdo_type":2,"name":"PatientId","len":10,"precision":0}
{"flags":0,"sqlsrv:decl_type":"char","native_type":"string","table":"","pdo_type":2,"name":"SSN","len":11,"precision":0}
{"flags":0,"sqlsrv:decl_type":"nvarchar","native_type":"string","table":"","pdo_type":2,"name":"FirstName","len":50,"precision":0}
{"flags":0,"sqlsrv:decl_type":"nvarchar","native_type":"string","table":"","pdo_type":2,"name":"LastName","len":50,"precision":0}
{"flags":0,"sqlsrv:decl_type":"date","native_type":"string","table":"","pdo_type":2,"name":"BirthDate","len":10,"precision":0}

Classificação de Confidencialidade usando um conjunto de valores predefinido

Da versão 5.9.0 em diante, os drivers PHP adicionarão uma recuperação da ordem de classificação ao usar o driver ODBC 17.4.2 ou posterior. O usuário poderá definir a classificação ao usar a opção ADICIONAR CLASSIFICAÇÃO DE CONFIDENCIALIDADE para classificar colunas de dados.

Por exemplo, caso o usuário atribua NONE e LOW a BirthDate e SSN, respectivamente, a representação JSON será mostrada da seguinte maneira:

{"0":{"Label":{"name":"Confidential Personal Data","id":""},"Information Type":{"name":"Birthdays","id":""},"rank":0},"rank":0}
{"0":{"Label":{"name":"Highly Confidential - secure privacy","id":""},"Information Type":{"name":"Credentials","id":""},"rank":10},"rank":10}

Conforme mostrado na classificação de confidencialidade, os valores numéricos das classificações são:

0 for NONE
10 for LOW
20 for MEDIUM
30 for HIGH
40 for CRITICAL

Portanto, em vez de RANK=NONE, caso o usuário defina RANK=CRITICAL ao classificar a coluna BirthDate, os metadados de classificação serão:

array(1) {
  ["Data Classification"]=>
  array(2) {
    [0]=>
    array(3) {
      ["Label"]=>
      array(2) {
        ["name"]=>
        string(26) "Confidential Personal Data"
        ["id"]=>
        string(0) ""
      }
      ["Information Type"]=>
      array(2) {
        ["name"]=>
        string(9) "Birthdays"
        ["id"]=>
        string(0) ""
      }
      ["rank"]=>
      int(40)
    }
    ["rank"]=>
    int(40)
  }
}

A representação JSON atualizada será mostrada abaixo:

{"0":{"Label":{"name":"Confidential Personal Data","id":""},"Information Type":{"name":"Birthdays","id":""},"rank":40},"rank":40}

Consulte Também

PDOStatement Class

PDO