Teilen über


PDOStatement::getColumnMeta

PHP-Treiber herunterladen

Ruft die Metadaten für eine Spalte ab.

Syntax

  
array PDOStatement::getColumnMeta ( $column );  

Parameter

$conn (ganze Zahl): Die nullbasierte Nummer der Spalte, deren Metadaten Sie abrufen möchten.

Rückgabewert

Ein assoziatives Array (Schlüssel und Wert), das die Metadaten für die Spalte enthält. Im Abschnitt „Anmerkungen“ finden Sie eine Beschreibung für die Felder im Array.

Hinweise

Die folgende Tabelle beschreibt die Felder im durch „getColumnMeta“ zurückgegebenen Array.

NAME WERTE
native_type Gibt den PHP-Typ der Spalte an Immer Zeichenfolge.
driver:decl_type Gibt den SQL-Typ an, der verwendet wird, um den Spaltenwert in der Datenbank darzustellen Falls die Spalte im Resultset das Ergebnis einer Funktion ist, wird dieser Wert nicht von PDOStatement::getColumnMeta zurückgegeben.
flags Gibt die Flags (Kennzeichnungen), die für diese Spalte eingerichtet wurden, an Immer 0.
name Gibt den Namen der Spalte in der Datenbank an
table Gibt den Namen derjenigen Tabelle in der Datenbank an, welche die Spalte enthält Immer leer.
Länge Gibt die Länge der Spalte an
precision (Genauigkeit) Gibt die numerische Genauigkeit dieser Spalte an
pdo_type Gibt den Typ dieser Spalte an, wie durch die PDO::PARAM_* Konstanten widergespiegelt. Immer PDO::PARAM_STR (2).

Unterstützung für PDO wurde in Version 2.0 von Microsoft-Treiber für PHP für SQL Serverhinzugefügt.

Beispiel

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

Klassifizierungsmetadaten zu Vertraulichkeitsdaten

Ab Version 5.8.0 ist ein neues Anweisungsattribut PDO::SQLSRV_ATTR_DATA_CLASSIFICATION verfügbar, damit Benutzer in Microsoft SQL Server 2019 mithilfe von PDOStatement::getColumnMeta auf die Klassifizierungsmetadaten zu Vertraulichkeitsdaten zugreifen können. Hierfür wird der Microsoft ODBC Driver 17.4.2 oder höher benötigt.

Beachten Sie, dass das Attribut PDO::SQLSRV_ATTR_DATA_CLASSIFICATION standardmäßig auf false festgelegt ist. Wird es jedoch auf true festgelegt, wird das zuvor erwähnte Arrayfeld (flags) mit den Klassifizierungsmetadaten zu Vertraulichkeitsdaten befüllt, falls vorhanden.

Hier als Beispiel eine Patiententabelle:

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

Die Spalten „SSN“ und „BirthDate“ können wie unten dargestellt klassifiziert werden:

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

Wenn Sie auf die Metadaten zugreifen möchten, verwenden Sie wie im folgenden Codeausschnitt gezeigt PDOStatement::getColumnMeta, nachdem Sie PDO::SQLSRV_ATTR_DATA_CLASSIFICATION auf TRUE festgelegt haben:

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

Die Ausgabe von Metadaten für alle Spalten sieht folgendermaßen aus:

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

Wenn Sie den obigen Codeausschnitt ändern, indem Sie PDO::SQLSRV_ATTR_DATA_CLASSIFICATION auf false festlegen (Standard), wird wie folgt dargestellt für das Feld flags wie zuvor immer der Wert 0 verwendet:

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

Vertraulichkeitsbewertung mithilfe vordefinierter Werte

Ab 5.9.0 können PHP-Treiber bei Verwendung von ODBC-Treibern mit Version 17.4.2 und höher Klassifizierungsbewertungen abrufen. Mithilfe von ADD SENSITIVITY CLASSIFICATION können Benutzer eine Bewertung definieren, um Datenspalten zu klassifizieren.

Wenn ein Benutzer beispielsweise NONE und LOW jeweils BirthDate und SSN zuweist, sieht die JSON-Darstellung folgendermaßen aus:

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

Wie bei der Vertraulichkeitsklassifizierung ersichtlich wird, lauten die numerischen Werte für die Bewertungen wie folgt:

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

Deshalb lauten die Klassifizierungsmetadaten folgendermaßen, wenn der Benutzer RANK=CRITICAL anstelle von RANK=NONE beim Klassifizieren der Spalte BirthDate definiert:

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

Unten sehen Sie die aktualisierte JSON-Darstellung:

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

Weitere Informationen

PDOStatement-Klasse

PDO