PDOStatement::getColumnMeta
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}