sqlsrv_field_metadata

Stáhnout ovladač PHP

Získává metadata pro pole připraveného výroku. Pro informace o přípravě prohlášení viz sqlsrv_query nebo sqlsrv_prepare. Všimněte si, že sqlsrv_field_metadata lze volat na jakýkoli připravený výrok, před i po jeho provedení.

Syntax

  
sqlsrv_field_metadata( resource $stmt)  

Parameters

$stmt: Zdroj výkazů, pro který se požadují metadata polí.

Návratová hodnota

Pole polí nebo nepravdivé. Pole se skládá z jednoho pole pro každé pole ve výsledné množině. Každé podpole má klíče, jak je popsáno v tabulce níže. Pokud dojde k chybě při získávání metadat polí, vrací se false (nepravdě ).

Key Description
Name Název sloupce, ke kterému pole odpovídá.
Typ Číselná hodnota odpovídající typu SQL.
Velikost Počet znaků pro pole typu znaku (char(n), varchar(n), nchar(n), nvarchar(n), XML). Počet bajtů pro pole binárního typu (binary(n), varbinary(n), UDT). NULL pro jiné typy dat SQL Server.
Přesnost Přesnost pro typy přesnosti proměnných (reálná, číselná, desetinná, datetime2, datetimeoffset a time). NULL pro jiné typy dat SQL Server.
Scale Škála pro typy škál proměnných (číselná, desetinná, datetime2, datetimeoffset a time). NULL pro jiné typy dat SQL Server.
Nullovatelný Vyčíslovaná hodnota označující, zda je sloupec nulovatelný (SQLSRV_NULLABLE_YES), sloupec není nulovatelný (SQLSRV_NULLABLE_NO), nebo zda není známo, zda je sloupec nulovatelný (SQLSRV_NULLABLE_UNKNOWN).

Následující tabulka poskytuje více informací o klíčích pro každé podpole (viz dokumentace SQL Server pro více informací o těchto typech):

Typ dat SQL Server 2008 Typ Min/Max přesnost Min/Max škála Velikost
bigint SQL_BIGINT (-5) 8
binární 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/10 0/0
datetime SQL_TYPE_TIMESTAMP (93) 23/23 3/3
datetime2 SQL_TYPE_TIMESTAMP (93) 19/27 0/7
datetimeoffset SQL_SS_TIMESTAMPOFFSET (-155) 26/34 0/7
desítkové číslo SQL_DECIMAL (3) 1/38 Hodnota 0/přesnosti
float SQL_FLOAT (6) 4/8
bitová kopie 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
číselný SQL_NUMERIC (2) 1/38 Hodnota 0/přesnosti
nvarchar SQL_WVARCHAR (-9) 0 <n< 4000 1
real SQL_REAL (7) 4/4
smalldatetime SQL_TYPE_TIMESTAMP (93) 16/16 0/0
Malý int SQL_SMALLINT (5) 2 bajty
Malé peníze SQL_DECIMAL (3) 10/10 4/4
sql_variant SQL_SS_VARIANT (-150) proměnná
poslat SMS SQL_LONGVARCHAR (-1) 2 GB
time SQL_SS_TIME2 (-154) 8/16 0/7
časové razítko SQL_BINARY (-2) 8 bajtů
tinyint SQL_TINYINT (-6) 1 bajt
Udt SQL_SS_UDT (-151) proměnná
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) Nula (0) znamená, že maximální velikost je povolena.

Nullable klíč může být buď ano, nebo ne.

Example

Následující příklad vytvoří zdroj příkazů, poté načte a zobrazí metadata pole. Příklad předpokládá, že SQL Server a databáze AdventureWorks jsou nainstalovány v místním počítači. Při spuštění příkladu z příkazového řádku se veškerý výstup zapíše do konzoly.

<?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 klasifikace citlivých dat

Ve verzi 5.8.0 je představena nová možnostDataClassification, která umožňuje uživatelům přistupovat k metadatům klasifikace citlivých dat v Microsoft SQL Server 2019 pomocí sqlsrv_field_metadata, což vyžaduje ovladač Microsoft ODBC 17.4.2 nebo vyšší.

Výchozí volba DataClassification je false, ale při nastavení na true, pole vrácené bude sqlsrv_field_metadata naplněno metadaty klasifikace citlivých dat, pokud existují.

Vezměme si například tabulku pacientů:

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

Můžeme klasifikovat sloupce SSN a Datum narození, jak je uvedeno níže:

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

Pro přístup k metadatům vyvolávejte, sqlsrv_field_metadata jak je uvedeno v níže uvedeném úryvku:

$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']); 
        }
    }
}

Výstup bude:

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] => 
                )

        )

)

Pokud použijeme sqlsrv_query místo sqlsrv_prepare, výše uvedený úryvek lze upravit takto:

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

Jak můžete vidět v JSON reprezentaci níže, metadata klasifikace dat jsou zobrazena, pokud jsou spojena s těmito sloupci:

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

Hodnocení citlivosti pomocí předdefinované sady hodnot

Od verze 5.9.0 přidávaly PHP ovladače vyhledávání klasifikačních hodností při použití ODBC Driver 17.4.2 nebo vyššího. Uživatel může definovat pořadí při klasifikaci ADD SENSITIVITY CLASSIFICATION libovolného datového sloupce.

Například pokud uživatel přiřadí NONE a LOW k BirthDate a SSN, JSON reprezentace se zobrazí následovně:

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

Jak je ukázáno v klasifikaci citlivosti, číselné hodnoty hodností jsou:

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

Pokud tedy místo , uživatel RANK=NONEpři klasifikaci sloupce Datum narození definuje RANK=CRITICAL místo , bude klasifikační metadata následující:

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

Aktualizovaná reprezentace JSON je uvedena níže:

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

Viz také

Referenční informace k rozhraní API ovladače SQLSRV

Konstanty (ovladače Microsoftu pro PHP pro SQL Server)

O příkladech kódu v dokumentaci