Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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