PDOStatement::getColumnMeta
열에 대한 메타데이터를 검색합니다.
구문
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}