Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A pontosság megőrzése érdekében a decimális vagy numerikus típusokat mindig szövegként olvassuk be a pontos pontosság és skálázás érdekében. Ha bármely érték kisebb 1-nél, a kezdő nulla hiányzik. A pénz és a smallmoney mezők ugyanazok, mivel ezek olyan decimális mezők, amelyek fix skálája 4.
Kezdő nullák hozzáadása, ha hiányzik
Az 5.6.0-s verziótól kezdve a kapcsolati vagy utasítási attribútum PDO::SQLSRV_ATTR_FORMAT_DECIMALS lehetővé teszi a felhasználó számára a decimális sztringek formázását. Ez az attribútum logikai értéket vár (igaz vagy hamis), és csak a beolvasott eredmények decimális vagy numerikus értékeinek formázását befolyásolja. Más szóval ez az attribútum nincs hatással más műveletekre, például beszúrásra vagy frissítésre.
Alapértelmezés szerint PDO::SQLSRV_ATTR_FORMAT_DECIMALShamis. Ha igaz értékre van állítva, a program az 1-nél kisebb decimális értékekhez hozzáadja a decimális sztringek kezdő nulláit.
Tizedesjegyek számának konfigurálása
Ha a PDO::SQLSRV_ATTR_FORMAT_DECIMALS be van kapcsolva, egy másik kapcsolat- vagy utasításattribútum, a PDO::SQLSRV_ATTR_DECIMAL_PLACES, lehetővé teszi a felhasználók számára a tizedesjegyek számának konfigurálását a pénz és a kis összegű pénz adatok megjelenítésekor. A(z) [0, 4] tartományban lévő egész értékeket fogadja el, és a megjelenítésekor kerekítés is előfordulhat. A mögöttes pénzadatok azonban változatlanok maradnak.
Az utasítás attribútumai mindig felülbírálják a megfelelő kapcsolati beállításokat. Vegye figyelembe, hogy a beállítás PDO::SQLSRV_ATTR_DECIMAL_PLACES a pénzadatokat érinti, és PDO::SQLSRV_ATTR_FORMAT_DECIMALS igaz értékre kell állítani. Függetlenül a PDO::SQLSRV_ATTR_DECIMAL_PLACES beállítástól, a formázás ki van kapcsolva.
Megjegyzés:
Mivel a pénz- vagy kisösszegű pénz mezők 4-es skálával rendelkeznek, a PDO::SQLSRV_ATTR_DECIMAL_PLACES mezőt a rendszer figyelmen kívül hagyja, ha negatív számot vagy 4-nél nagyobb értéket állít be. A számítások bemeneteként nem ajánlott formázott pénzadatokat használni.
A kapcsolati attribútumok beállítása
Attribútumok beállítása a kapcsolati ponton:
$attrs = array(PDO::SQLSRV_ATTR_FORMAT_DECIMALS => true, PDO::SQLSRV_ATTR_DECIMAL_PLACES => 2); $conn = new PDO("sqlsrv:Server = myServer; Database = myDB", $username, $password, $attrs);Attribútumok beállítása a kapcsolat után:
$conn = new PDO("sqlsrv:Server = myServer; Database = myDB", $username, $password); $conn->setAttribute(PDO::SQLSRV_ATTR_FORMAT_DECIMALS, true); $conn->setAttribute(PDO::SQLSRV_ATTR_DECIMAL_PLACES, 2);
Példa – pénzadatok formázása
Az alábbi példa bemutatja, hogyan lehet beolvasni a pénzadatokat a PDOStatement::bindColumn használatával:
<?php
$database = "myDB";
$server = "(local)";
$conn = new PDO( "sqlsrv:server=$server; Database = $database", "", "");
$conn->setAttribute(PDO::SQLSRV_ATTR_FORMAT_DECIMALS, true);
$numDigits = 3;
$query = "SELECT smallmoney1 FROM aTable";
$options = array(PDO::SQLSRV_ATTR_DECIMAL_PLACES => $numDigits);
$stmt = $conn->prepare($query, $options);
$stmt->execute();
$stmt->bindColumn('smallmoney1', $field);
$result = $stmt->fetch(PDO::FETCH_BOUND);
echo $field; // expect a number string with 3 decimal places
unset($stmt);
unset($conn);
?>
Példa – kapcsolati attribútumok felülbírálása
Az alábbi példa bemutatja, hogyan bírálhatja felül a kapcsolati attribútumokat:
<?php
$database = 'myDatabase';
$server = 'myServer';
$username = 'myuser';
$password = '<password>'
$conn = new PDO("sqlsrv:server=$server; Database = $database", $username, $password);
$conn->setAttribute(PDO::SQLSRV_ATTR_FORMAT_DECIMALS, true);
$conn->setAttribute(PDO::SQLSRV_ATTR_DECIMAL_PLACES, 2);
$query = 'SELECT smallmoney1 FROM testTable1';
$options = array(PDO::SQLSRV_ATTR_FORMAT_DECIMALS => false);
$stmt = $conn->prepare($query, $options);
$stmt->execute();
$stmt->bindColumn('smallmoney1', $field);
$result = $stmt->fetch(PDO::FETCH_BOUND);
echo $field; // expect a number string showing the original scale -- 4 decimal places
unset($stmt);
unset($conn);
?>
Lásd még:
Decimális sztringek és pénzértékek formázása (SQLSRV-illesztő)