Bagikan melalui


sqlsrv_field_metadata

Unduh driver PHP

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}

Lihat Juga

Referensi API Driver SQLSRV

Konstanta (Driver Microsoft untuk PHP untuk SQL Server)

Tentang Contoh Kode dalam Dokumentasi