Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby zachować dokładność, typy dziesiętne lub liczbowe są zawsze pobierane jako ciągi z dokładną dokładnością i skalami. Jeśli jakakolwiek wartość jest mniejsza niż 1, brakuje zera wiodącego. Jest tak samo w przypadku pól money i smallmoney, jak są to pola dziesiętne o stałej skali równej 4.
Dodaj zero wiodące, jeśli brakuje
Począwszy od wersji 5.6.0, atrybut PDO::SQLSRV_ATTR_FORMAT_DECIMALS połączenia lub instrukcji umożliwia użytkownikowi formatowanie łańcuchów dziesiętnych. Ten atrybut oczekuje wartości logicznej (prawda lub fałsz) i wpływa tylko na formatowanie wartości dziesiętnych lub liczbowych w pobranych wynikach. Innymi słowy, ten atrybut nie ma wpływu na inne operacje, takie jak wstawienie lub aktualizacja.
Domyślnie PDO::SQLSRV_ATTR_FORMAT_DECIMALS jest fałszem. Jeśli ustawiono wartość true, wiodące zera do ciągów dziesiętnych zostaną dodane dla dowolnej wartości dziesiętnej mniejszej niż 1.
Konfigurowanie liczby miejsc dziesiętnych
Po włączeniu PDO::SQLSRV_ATTR_FORMAT_DECIMALS inny atrybut połączenia lub instrukcji, PDO::SQLSRV_ATTR_DECIMAL_PLACES, pozwala użytkownikom konfigurować liczbę miejsc dziesiętnych podczas wyświetlania danych typu money i smallmoney. Akceptuje ona wartości całkowite w zakresie [0, 4], a zaokrąglanie może wystąpić po wyświetleniu. Jednak bazowe dane pieniężne pozostają takie same.
Atrybuty instrukcji zawsze zastępują odpowiednie ustawienia połączenia. Należy pamiętać, że PDO::SQLSRV_ATTR_DECIMAL_PLACES opcja dotyczy tylko danych pieniężnych i PDO::SQLSRV_ATTR_FORMAT_DECIMALS musi być ustawiona na wartość true. W przeciwnym razie formatowanie jest wyłączone niezależnie od PDO::SQLSRV_ATTR_DECIMAL_PLACES ustawienia.
Uwaga / Notatka
Ponieważ pola typu money lub smallmoney mają skalę 4, ustawienie PDO::SQLSRV_ATTR_DECIMAL_PLACES na dowolną liczbę ujemną lub wartość większą niż 4 zostanie zignorowane. Nie zaleca się używania żadnych sformatowanych danych pieniężnych jako danych wejściowych do jakichkolwiek obliczeń.
Aby ustawić atrybuty połączenia
Ustaw atrybuty w punkcie połączenia:
$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);Ustaw atrybuty po ustanowieniu połączenia.
$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);
Przykład — formatowanie danych pieniężnych
W poniższym przykładzie pokazano, jak pobrać dane pieniężne przy użyciu pdOStatement::bindColumn:
<?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);
?>
Przykład — zastępowanie atrybutów połączenia
W poniższym przykładzie pokazano, jak zastąpić atrybuty połączenia:
<?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);
?>
Zobacz też
Formatowanie ciągów dziesiętnych i wartości pieniężnych (sterownik SQLSRV)