PDOStatement::getColumnMeta

Télécharger le pilote PHP

Récupère des métadonnées pour une colonne.

Syntaxe

  
array PDOStatement::getColumnMeta ( $column );  

Paramètres

$conn : (entier) numéro en base zéro de la colonne dont vous voulez récupérer les métadonnées.

Valeur de retour

Tableau associatif (clé et valeur) contenant les métadonnées pour la colonne. Consultez la section Notes pour obtenir une description des champs du tableau.

Notes

Le tableau suivant décrit les champs du tableau retourné par getColumnMeta.

NOM VALUES
native_type Spécifie le type PHP de la colonne. Toujours une chaîne.
driver:decl_type Spécifie le type SQL utilisé pour représenter la valeur de la colonne dans la base de données. Si la colonne dans le jeu de résultats est le résultat d’une fonction, cette valeur n’est pas retournée par PDOStatement::getColumnMeta.
flags Spécifie les indicateurs définis pour cette colonne. Toujours 0.
name Spécifie le nom de la colonne dans la base de données.
table Spécifie le nom de la table qui contient la colonne dans la base de données. Toujours vide.
len Spécifie la longueur de la colonne.
précision Spécifie la précision numérique de cette colonne.
pdo_type Spécifie le type de cette colonne comme représenté par les constantes PDO::PARAM_*. Toujours PDO::PARAM_STR (2).

La prise en charge de PDO a été ajoutée dans la version 2.0 de Pilotes Microsoft SQL Server pour PHP.

Exemple

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

Métadonnées de classification des données sensibles

À compter de la version 5.8.0, un nouvel attribut d’instruction PDO::SQLSRV_ATTR_DATA_CLASSIFICATION permet aux utilisateurs d’accéder aux métadonnées de classification des données sensibles dans Microsoft SQL Server 2019 avec PDOStatement::getColumnMeta, ce qui implique d’utiliser la version 17.4.2 ou une version ultérieure de Microsoft ODBC Driver.

Il est à noter que l’attribut PDO::SQLSRV_ATTR_DATA_CLASSIFICATION a la valeur false par défaut. En revanche, s’il a la valeur true, le champ de tableau mentionné plus haut, flags, est rempli avec les métadonnées de classification des données sensibles, le cas échéant.

Prenons par exemple une table Patients :

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

Nous pouvons classer ainsi les colonnes SSN et BirthDate :

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

Pour accéder aux métadonnées, utilisez PDOStatement::getColumnMeta après avoir défini PDO::SQLSRV_ATTR_DATA_CLASSIFICATION sur true, comme dans l’extrait de code ci-dessous :

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

Voici la sortie des métadonnées de toutes les colonnes :

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

Si nous modifions l’extrait de code ci-dessus en affectant à PDO::SQLSRV_ATTR_DATA_CLASSIFICATION la valeur false (cas par défaut), le champ flags sera toujours 0 comme avant :

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

Classement de la sensibilité avec un ensemble prédéfini de valeurs

À compter de 5.9.0, les pilotes PHP ont ajouté la récupération de la classification de sensibilité lors de l’utilisation du pilote ODBC 17.4.2 ou ultérieur. L’utilisateur peut définir le classement lors de l’utilisation de ADD SENSITIVITY CLASSIFICATION pour classifier n’importe quelle colonne de données.

Par exemple, si l’utilisateur affecte NONE et LOW respectivement à BirthDate et à SSN, la représentation JSON est la suivante :

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

Comme indiqué dans classification de sensibilité, les valeurs numériques des degrés sont les suivantes :

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

Par conséquent, si au lieu de RANK=NONE, l’utilisateur définit RANK=CRITICAL lors de la classification de la colonne BirthDate, les métadonnées de classification sont :

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 représentation JSON mise à jour est montrée ci-dessous :

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

Voir aussi

PDOStatement, classe

PDO