다음을 통해 공유


PDOStatement::getColumnMeta

PHP 드라이버 다운로드

열에 대한 메타데이터를 검색합니다.

구문

  
array PDOStatement::getColumnMeta ( $column );  

매개 변수

$conn: (정수) 메타데이터를 검색하려는 열의 0부터 시작하는 번호입니다.

Return Value

열에 대한 메타데이터를 포함하는 결합형 배열(키 및 값)입니다. 배열에 있는 필드에 대한 설명은 설명 섹션을 참조하세요.

설명

다음 표에서는 getColumnMeta에서 반환된 배열의 필드를 설명합니다.

이름 VALUES
native_type 열에 대한 PHP 형식을 지정합니다. 항상 문자열입니다.
driver:decl_type 데이터베이스의 열 값을 나타내는 데 사용되는 SQL 형식을 지정합니다. 결과 집합의 열이 함수의 결과인 경우 이 값은 PDOStatement::getColumnMeta에서 반환되지 않습니다.
flags 이 열에 대해 설정된 플래그를 지정합니다. 항상 0입니다.
name 데이터베이스에 있는 열의 이름을 지정합니다.
table 데이터베이스 열을 포함하는 테이블 이름을 지정합니다. 항상 비어 있습니다.
열 길이를 지정합니다.
자릿수 이 열의 전체 자릿수를 지정합니다.
pdo_type PDO::P ARAM_* 상수로 표시되는 이 열의 형식을 지정합니다. 항상 PDO::P ARAM_STR (2).

Microsoft Drivers for PHP for SQL Server의 2.0 버전에서 PDO에 대한 지원이 추가되었습니다.

예시

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

민감도 데이터 분류 메타데이터

버전 5.8.0부터 사용자가 Microsoft SQL Server 2019에서 PDOStatement::getColumnMeta를 사용하여(Microsoft ODBC Driver 17.4.2 이상 필요) 민감도 데이터 분류 메타데이터에 액세스할 수 있는 새 문 특성 PDO::SQLSRV_ATTR_DATA_CLASSIFICATION을 사용할 수 있습니다.

PDO::SQLSRV_ATTR_DATA_CLASSIFICATION 특성은 기본적으로 false이지만 true로 설정된 경우 앞서 언급한 배열 필드 flags에는 민감도 데이터 분류 메타데이터(있는 경우)가 채워집니다.

Patients 테이블을 예로 들어 보겠습니다.

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

다음과 같이 SSN 및 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')

메타데이터에 액세스하려면 아래 코드 조각과 같이 PDO::SQLSRV_ATTR_DATA_CLASSIFICATION을 true로 설정한 후 PDOStatement::getColumnMeta를 사용합니다.

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

모든 열에 대한 메타데이터의 출력은 다음과 같습니다.

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

(기본 사례)flags로 설정 PDO::SQLSRV_ATTR_DATA_CLASSIFICATION false 하여 위의 코드 조각을 수정하는 경우 필드는 항상 0 다음과 같이 이전과 같습니다.

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

미리 정의된 값 집합을 사용한 민감도 순위

5.9.0부터 PHP 드라이버는 ODBC Driver 17.4.2 이상을 사용할 때 분류 순위 검색을 추가했습니다. 사용자는 ADD SENSITIVITY CLASSIFICATION을 사용하여 데이터 열을 분류할 때 순위를 정의할 수 있습니다.

예를 들어 사용자가 BirthDate 및 LOW SSN을 각각 할당 NONE 하는 경우 JSON 표현은 다음과 같이 표시됩니다.

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

민감도 분류표시된 것처럼 순위의 숫자 값은 다음과 같습니다.

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

따라서 대신 BirthDate 열을 분류할 때 사용자가 정의하는 RANK=CRITICAL 경우 RANK=NONE분류 메타데이터는 다음과 같습니다.

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

업데이트된 JSON 표현은 다음과 같습니다.

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

참고 항목

PDO 문 클래스

PDO