sqlsrv_field_metadata
Mengambil metadata untuk bidang pernyataan yang disiapkan. Untuk informasi tentang menyiapkan pernyataan, lihat sqlsrv_query atau sqlsrv_prepare. Perhatikan bahwa sqlsrv_field_metadata dapat dipanggil pada pernyataan, pra-atau pasca-eksekusi yang disiapkan.
Sintaks
sqlsrv_field_metadata( resource $stmt)
Parameter
$stmt: Sumber daya pernyataan yang metadata bidangnya dicari.
Tampilkan Nilai
Array array atau false. Array terdiri dari satu array untuk setiap bidang dalam tataan hasil. Setiap sub-array memiliki kunci seperti yang dijelaskan dalam tabel di bawah ini. Jika ada kesalahan dalam mengambil metadata bidang, false akan dikembalikan.
Kunci | Deskripsi |
---|---|
Nama | Nama kolom yang sesuai dengan bidang. |
Jenis | Nilai numerik yang sesuai dengan jenis SQL. |
Ukuran | Jumlah karakter untuk bidang jenis karakter (char(n), varchar(n), nchar(n), nvarchar(n), XML). Jumlah byte untuk bidang jenis biner (biner(n), varbinary(n), UDT). NULL untuk jenis data SQL Server lainnya. |
Presisi | Presisi untuk jenis presisi variabel (riil, numerik, desimal, datetime2, datetimeoffset, dan waktu). NULL untuk jenis data SQL Server lainnya. |
Sisik | Skala untuk jenis skala variabel (numerik, desimal, tanggalwaktu2, datetimeoffset, dan waktu). NULL untuk jenis data SQL Server lainnya. |
Dapat diubah ke null | Nilai enumerasi yang menunjukkan apakah kolom dapat diubah ke null (SQLSRV_NULLABLE_YES), kolom tidak dapat diubah ke null (SQLSRV_NULLABLE_NO), atau tidak diketahui jika kolom dapat diubah ke null (SQLSRV_NULLABLE_UNKNOWN). |
Tabel berikut ini memberikan informasi selengkapnya tentang kunci untuk setiap sub-array (lihat dokumentasi SQL Server untuk informasi selengkapnya tentang jenis ini):
Jenis data SQL Server 2008 | Jenis | Presisi Min/Maks | Skala Min/Maks | Ukuran |
---|---|---|---|---|
bigint | SQL_BIGINT (-5) | 8 | ||
biner | SQL_BINARY (-2) | 0 <n< 8000 1 | ||
bit | SQL_BIT (-7) | |||
char | SQL_CHAR (1) | 0 <n< 8000 1 | ||
date | SQL_TYPE_DATE (91) | 10 Oktober | 0/0 | |
datetime | SQL_TYPE_TIMESTAMP (93) | 23/23 | 3/3 | |
tanggalwaktu2 | SQL_TYPE_TIMESTAMP (93) | 19/27 | 0/7 | |
tanggalwaktulewat | SQL_SS_TIMESTAMPOFFSET (-155) | 26/34 | 0/7 | |
desimal | SQL_DECIMAL (3) | 1/38 | Nilai 0/presisi | |
float | SQL_FLOAT (6) | 4/8 | ||
gambar | SQL_LONGVARBINARY (-4) | 2 GB | ||
int | SQL_INTEGER (4) | |||
money | SQL_DECIMAL (3) | 19/19 | 4/4 | |
nchar | SQL_WCHAR (-8) | 0 <n< 4000 1 | ||
ntext | SQL_WLONGVARCHAR (-10) | 1 GB | ||
numeric | SQL_NUMERIC (2) | 1/38 | Nilai 0/presisi | |
nvarchar | SQL_WVARCHAR (-9) | 0 <n< 4000 1 | ||
real | SQL_REAL (7) | 4/4 | ||
smalldatetime | SQL_TYPE_TIMESTAMP (93) | 16/16 | 0/0 | |
smallint | SQL_SMALLINT (5) | 2 byte | ||
Smallmoney | SQL_DECIMAL (3) | 10 Oktober | 4/4 | |
aql_variant | SQL_SS_VARIANT (-150) | variabel | ||
text | SQL_LONGVARCHAR (-1) | 2 GB | ||
waktu | SQL_SS_TIME2 (-154) | 8/16 | 0/7 | |
rentang waktu | SQL_BINARY (-2) | 8 byte | ||
tinyint | SQL_TINYINT (-6) | 1 byte | ||
udt | SQL_SS_UDT (-151) | variabel | ||
uniqueidentifier | SQL_GUID (-11) | 16 | ||
varbinary | SQL_VARBINARY (-3) | 0 <n< 8000 1 | ||
varchar | SQL_VARCHAR (12) | 0 <n< 8000 1 | ||
xml | SQL_SS_XML (-152) | 0 |
(1) Nol (0) menunjukkan bahwa ukuran maksimum diizinkan.
Kunci nullable dapat berupa ya atau tidak.
Contoh
Contoh berikut membuat sumber daya pernyataan, lalu mengambil dan menampilkan metadata bidang. Contoh mengasumsikan bahwa SQL Server dan database AdventureWorks diinstal di komputer lokal. Semua output ditulis ke konsol saat contoh dijalankan dari baris perintah.
<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array("Database"=>"AdventureWorks");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Prepare the statement. */
$tsql = "SELECT ReviewerName, Comments FROM Production.ProductReview";
$stmt = sqlsrv_prepare( $conn, $tsql);
/* Get and display field metadata. */
foreach( sqlsrv_field_metadata( $stmt) as $fieldMetadata) {
foreach( $fieldMetadata as $name => $value) {
echo "$name: $value\n";
}
echo "\n";
}
/* Note: sqlsrv_field_metadata can be called on any statement
resource, pre- or post-execution. */
/* Free statement and connection resources. */
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>
Metadata Klasifikasi Data Sensitivitas
Opsi DataClassification
baru diperkenalkan dalam versi 5.8.0 bagi pengguna untuk mengakses metadata klasifikasi data sensitivitas di Microsoft SQL Server 2019 menggunakan sqlsrv_field_metadata
, yang memerlukan Microsoft ODBC Driver 17.4.2 atau lebih tinggi.
Secara default, opsinya DataClassification
adalah false
, tetapi ketika diatur ke true
, array yang dikembalikan oleh sqlsrv_field_metadata
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, panggil sqlsrv_field_metadata
seperti yang ditunjukkan pada cuplikan di bawah ini:
$tableName = 'Patients';
$tsql = "SELECT * FROM $tableName";
$stmt = sqlsrv_prepare($conn, $tsql, array(), array('DataClassification' => true));
if (sqlsrv_execute($stmt)) {
$fieldmeta = sqlsrv_field_metadata($stmt);
foreach ($fieldmeta as $f) {
if (count($f['Data Classification']) > 0) {
echo $f['Name'] . ": \n";
print_r($f['Data Classification']);
}
}
}
Outputnya akan berupa:
SSN:
Array
(
[0] => Array
(
[Label] => Array
(
[name] => Highly Confidential - secure privacy
[id] =>
)
[Information Type] => Array
(
[name] => Credentials
[id] =>
)
)
)
BirthDate:
Array
(
[0] => Array
(
[Label] => Array
(
[name] => Confidential Personal Data
[id] =>
)
[Information Type] => Array
(
[name] => Birthdays
[id] =>
)
)
)
Jika menggunakan sqlsrv_query
alih-alih sqlsrv_prepare
, cuplikan di atas dapat dimodifikasi, seperti ini:
$tableName = 'Patients';
$tsql = "SELECT * FROM $tableName";
$stmt = sqlsrv_query($conn, $tsql, array(), array('DataClassification' => true));
$fieldmeta = sqlsrv_field_metadata($stmt);
foreach ($fieldmeta as $f) {
$jstr = json_encode($f);
echo $jstr . PHP_EOL;
}
Seperti yang Anda lihat dalam representasi JSON di bawah ini, metadata klasifikasi data ditampilkan jika terkait dengan kolom:
{"Name":"PatientId","Type":4,"Size":null,"Precision":10,"Scale":null,"Nullable":0,"Data Classification":[]}
{"Name":"SSN","Type":1,"Size":11,"Precision":null,"Scale":null,"Nullable":1,"Data Classification":[{"Label":{"name":"Highly Confidential - secure privacy","id":""},"Information Type":{"name":"Credentials","id":""}}]}
{"Name":"FirstName","Type":-9,"Size":50,"Precision":null,"Scale":null,"Nullable":1,"Data Classification":[]}
{"Name":"LastName","Type":-9,"Size":50,"Precision":null,"Scale":null,"Nullable":1,"Data Classification":[]}
{"Name":"BirthDate","Type":91,"Size":null,"Precision":10,"Scale":0,"Nullable":1,"Data Classification":[{"Label":{"name":"Confidential Personal Data","id":""},"Information Type":{"name":"Birthdays","id":""}}]}
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(7) {
["Name"]=>
string(9) "BirthDate"
["Type"]=>
int(91)
["Size"]=>
NULL
["Precision"]=>
int(10)
["Scale"]=>
int(0)
["Nullable"]=>
int(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}