Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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