sqlsrv_field_metadata

Ladda ned PHP-drivrutin

Hämtar metadata för fälten i ett förberedt uttalande. För information om hur man förbereder ett uttalande, se sqlsrv_query eller sqlsrv_prepare. Observera att sqlsrv_field_metadata kan anropas på vilket förberedt uttalande som helst, före eller efter exekvering.

Syntax

  
sqlsrv_field_metadata( resource $stmt)  

Parameters

$stmt: En satsresurs för vilken fältmetadata efterfrågas.

Returvärde

En array av arrays eller falskt. Arrayen består av en array för varje fält i resultatmängden. Varje delarray har nycklar som beskrivs i tabellen nedan. Om det finns ett fel vid återhämtning av fältmetadata returneras falsk .

Key Description
Name Namnet på kolumnen som fältet motsvarar till.
Type Numeriskt värde som motsvarar en SQL-typ.
Size Antal tecken för fält av teckentyp (char(n), varchar(n), nchar(n), nvarchar(n), nvarchar(n), XML). Antal byte för fält av binär typ (binär(n), varbinär(n), UDT). NULL för andra SQL Server-datatyper.
Noggrannhet Precisionen för typer av variabel precision (reell, numerisk, decimal, datetime2, datetimeoffset och time). NULL för andra SQL Server-datatyper.
Scale Skalan för typer av variabelskala (numerisk, decimal, datetime2, datetimeoffset och time). NULL för andra SQL Server-datatyper.
Nullbar Ett uppräknat värde som anger om kolumnen är nullbar (SQLSRV_NULLABLE_YES), kolumnen inte är nullbar (SQLSRV_NULLABLE_NO), eller om kolumnen är nullbar (SQLSRV_NULLABLE_UNKNOWN).

Följande tabell ger mer information om nycklarna för varje underarray (se SQL Server-dokumentationen för mer information om dessa typer):

SQL Server 2008 datatyp Type Min/Max-precision Min/Max-skala Size
bigint SQL_BIGINT (-5) 8
binary SQL_BINARY (-2) 0 <n< 8000 1
lite grann 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
decimal SQL_DECIMAL (3) 1/38 0/precisionsvärde
float SQL_FLOAT (6) 4/8
image 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 0/precisionsvärde
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
Småpengar SQL_DECIMAL (3) 10/10 4/4
sql_variant SQL_SS_VARIANT (-150) variable
text SQL_LONGVARCHAR (-1) 2 GB
time SQL_SS_TIME2 (-154) 8/16 0/7
tidsstämpel SQL_BINARY (-2) 8 byte
tinyint SQL_TINYINT (-6) 1 byte
Udt SQL_SS_UDT (-151) variable
unik identifierare 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) Noll (0) indikerar att maximal storlek är tillåten.

Den Nullable-nyckeln kan vara antingen ja eller nej.

Example

Följande exempel skapar en statementresurs och hämtar sedan och visar fältmetadata. Exemplet förutsätter att SQL Server och AdventureWorks-databasen är installerade på den lokala datorn. Alla utdata skrivs till konsolen när exemplet körs från kommandoraden.

<?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 för klassificering av känslighetsdata

Ett nytt alternativ DataClassification introduceras i version 5.8.0 för användare att komma åt metadata för klassificering av känslighetsdata i Microsoft SQL Server 2019 med , sqlsrv_field_metadatavilket kräver Microsoft ODBC Driver 17.4.2 eller högre.

Som standard är falsealternativet DataClassification , men när det sätts till true, kommer arrayen som returneras av sqlsrv_field_metadata att fyllas med metadata för klassificering av känslighetsdata, om den finns.

Ta till exempel ett patientbord:

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

Vi kan klassificera kolumnerna SSN och Födelsedatum enligt nedan:

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

För att komma åt metadatan, anropa sqlsrv_field_metadata som visas i utdraget nedan:

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

Resultatet blir:

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

        )

)

Om du använder sqlsrv_query istället för sqlsrv_prepare, kan ovanstående utdrag ändras, så här:

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

Som du kan se i JSON-representationen nedan visas metadatan för dataklassificering om den är kopplad till kolumnerna:

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

Känslighetsranka med en fördefinierad uppsättning värden

Från och med 5.9.0 lade PHP-drivrutiner till klassificeringsrankningshämtning vid användning av ODBC Driver 17.4.2 eller högre. Användaren kan definiera rang när de använder ADD SENSITIVITY CLASSIFICATION för att klassificera vilken datakolumn som helst.

Till exempel, om användaren tilldelar NONE och LOW till BirthDate respektive SSN, visas JSON-representationen enligt följande:

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

Som visas i känslighetsklassificeringen är de numeriska värdena för rangerna:

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

Alltså, om användaren istället för RANK=NONE, definierar när kolumnen BirthDate klassificeras RANK=CRITICAL , kommer klassificeringsmetadata att vara:

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

Den uppdaterade JSON-representationen visas nedan:

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

Se även

API-referens för SQLSRV-drivrutin

Konstanter (Microsoft-drivrutiner för PHP för SQL Server)

Om kodexempel i dokumentationen