Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengambil metadata untuk kolom.
Sintaks
array PDOStatement::getColumnMeta ( $column );
Parameter
$conn: (Bilangan bulat) Jumlah berbasis nol kolom yang metadatanya ingin Anda ambil.
Tampilkan Nilai
Array asosiatif (kunci dan nilai) yang berisi metadata untuk kolom. Lihat bagian Keterangan untuk deskripsi bidang dalam array.
Keterangan
Tabel berikut ini menjelaskan bidang dalam array yang dikembalikan oleh getColumnMeta.
| NAMA | NILAI |
|---|---|
| native_type | Menentukan jenis PHP untuk kolom. Selalu string. |
| driver:decl_type | Menentukan jenis SQL yang digunakan untuk mewakili nilai kolom dalam database. Jika kolom dalam tataan hasil adalah hasil fungsi, nilai ini tidak dikembalikan oleh PDOStatement::getColumnMeta. |
| flags | Menentukan bendera yang ditetapkan untuk kolom ini. Selalu 0. |
| nama | Menentukan nama kolom dalam database. |
| tabel | Menentukan nama tabel yang berisi kolom dalam database. Selalu kosong. |
| len | Menentukan panjang kolom. |
| presisi | Menentukan presisi numerik kolom ini. |
| pdo_type | Menentukan tipe kolom ini seperti yang diwakili oleh konstanta PDO::P ARAM_*. Selalu PDO::P ARAM_STR (2). |
Dukungan untuk PDO ditambahkan di Driver Microsoft versi 2.0 untuk PHP untuk SQL Server.
Contoh
<?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'];
?>
Metadata Klasifikasi Data Sensitivitas
Dimulai dengan versi 5.8.0, atribut PDO::SQLSRV_ATTR_DATA_CLASSIFICATION pernyataan baru tersedia bagi pengguna untuk mengakses metadata klasifikasi data sensitivitas di Microsoft SQL Server 2019 menggunakan PDOStatement::getColumnMeta, yang memerlukan Microsoft ODBC Driver 17.4.2 atau lebih tinggi.
Perhatikan atribut PDO::SQLSRV_ATTR_DATA_CLASSIFICATION secara false default, tetapi ketika diatur ke true, bidang array yang disebutkan di atas, flags, akan diisi dengan metadata klasifikasi data sensitivitas, jika ada.
Ambil tabel Pasien misalnya:
CREATE TABLE Patients
[PatientId] int identity,
[SSN] char(11),
[FirstName] nvarchar(50),
[LastName] nvarchar(50),
[BirthDate] date)
Kita dapat mengklasifikasikan kolom SSN dan BirthDate seperti yang ditunjukkan di bawah ini:
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')
Untuk mengakses metadata, gunakan PDOStatement::getColumnMeta setelah pengaturan PDO::SQLSRV_ATTR_DATA_CLASSIFICATION ke true, seperti yang ditunjukkan pada cuplikan di bawah ini:
$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;
}
Output metadata untuk semua kolom adalah:
{"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}
Jika kita mengubah cuplikan di atas dengan mengatur PDO::SQLSRV_ATTR_DATA_CLASSIFICATION ke false (kasus default), flags bidang akan selalu 0 seperti sebelumnya, seperti ini:
{"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}
Peringkat Sensitivitas menggunakan sekumpulan nilai yang telah ditentukan sebelumnya
Dimulai dengan 5.9.0, driver PHP menambahkan pengambilan peringkat klasifikasi saat menggunakan Odbc Driver 17.4.2 atau lebih tinggi. Pengguna dapat menentukan peringkat saat menggunakan ADD SENSITIVITY CLASSIFICATION untuk mengklasifikasikan kolom data apa pun.
Misalnya, jika pengguna menetapkan NONE dan LOW ke BirthDate dan SSN masing-masing, representasi JSON ditampilkan sebagai berikut:
{"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}
Seperti yang ditunjukkan dalam klasifikasi sensitivitas, nilai numerik dari peringkat adalah:
0 for NONE
10 for LOW
20 for MEDIUM
30 for HIGH
40 for CRITICAL
Oleh karena itu, jika alih-alih RANK=NONE, pengguna menentukan saat mengklasifikasikan RANK=CRITICAL kolom BirthDate, metadata klasifikasi adalah:
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)
}
}
Representasi JSON yang diperbarui ditunjukkan di bawah ini:
{"0":{"Label":{"name":"Confidential Personal Data","id":""},"Information Type":{"name":"Birthdays","id":""},"rank":40},"rank":40}