PDOStatement::getColumnMeta

Download del driver PHP

Recupera i metadati per una colonna.

Sintassi

  
array PDOStatement::getColumnMeta ( $column );  

Parametri

$conn: (intero) numero in base zero della colonna di cui si vuole recuperare i metadati.

Valore restituito

Una matrice associativa (chiave e valore) che contiene i metadati per la colonna. Vedere la sezione Osservazioni per una descrizione dei campi nella matrice.

Osservazioni:

Nella tabella seguente sono descritti i campi della matrice restituita da getColumnMeta.

NOME VALUES
native_type Specifica il tipo PHP per la colonna. Sempre stringa.
driver:decl_type Specifica il tipo SQL usato per rappresentare il valore della colonna nel database. Se la colonna nel set di risultati è il risultato di una funzione, questo valore non viene restituito da PDOStatement::getColumnMeta.
flags Specifica i flag impostati per la colonna. Sempre 0.
name Specifica il nome della colonna nel database.
table Specifica il nome della tabella contenente la colonna nel database. Sempre vuoto.
len Specifica la lunghezza della colonna.
precisione Specifica la precisione numerica della colonna.
pdo_type Specifica il tipo della colonna come rappresentato dalle costanti PDO::PARAM_*. Sempre PDO::PARAM_STR (2).

Il supporto per PDO è stato aggiunto nella versione 2.0 dei driver Microsoft per PHP per SQL Server.

Esempio

<?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'];  
?>  

Metadati di classificazione dei dati di riservatezza

A partire dalla versione 5.8.0 è disponibile un nuovo attributo di istruzione PDO::SQLSRV_ATTR_DATA_CLASSIFICATION che consente agli utenti di accedere ai metadati di classificazione dei dati di riservatezza in Microsoft SQL Server 2019 usando PDOStatement::getColumnMeta, che richiede Microsoft ODBC Driver 17.4.2 o versione successiva.

L'attributo PDO::SQLSRV_ATTR_DATA_CLASSIFICATION è false per impostazione predefinita, ma se è impostato su true, il campo matrice flags citato in precedenza verrà popolato con i metadati di classificazione dei dati di riservatezza, se esistenti.

Ad esempio prendere in considerazione una tabella Patients:

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

È possibile classificare le colonne SSN e BirthDate come illustrato di seguito:

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')

Per accedere ai metadati usare PDOStatement::getColumnMeta dopo aver impostato PDO::SQLSRV_ATTR_DATA_CLASSIFICATION su true, come illustrato nel frammento di codice seguente:

$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;
}

L'output dei metadati per tutte le colonne è il seguente:

{"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 si modifica il frammento di codice precedente impostando PDO::SQLSRV_ATTR_DATA_CLASSIFICATION su false (caso predefinito), il campo flags sarà sempre 0 come in precedenza, come indicato di seguito:

{"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}

Classificazione di riservatezza mediante un set predefinito di valori

A partire dalla versione 5.9.0, i driver PHP hanno aggiunto il recupero della classificazione quando si usa ODBC Driver 17.4.2 o versione successiva. L'utente può definire la classificazione quando si usa ADD SENSITIVITY CLASSIFICATION per classificare qualsiasi colonna di dati.

Se ad esempio l'utente assegna NONE e LOW rispettivamente a BirthDate e SSN, la rappresentazione JSON viene visualizzata come segue:

{"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}

Come illustrato nella classificazione di riservatezza, i valori numerici dei ranghi sono:

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

Di conseguenza, se invece di RANK=NONE, l'utente definisce RANK=CRITICAL quando si classifica la colonna BirthDate, i metadati di classificazione saranno:

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)
  }
}

La rappresentazione JSON aggiornata è illustrata di seguito:

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

Vedi anche

Classe PDOStatement

PDO