Sdílet prostřednictvím


Formátování desetinných řetězců a hodnot peněz (ovladač PDO_SQLSRV)

Stáhnout ovladač PHP

Aby se zachovala přesnost, desetinné nebo číselné typy se vždy načítají jako řetězce s přesnými přesnostmi a měřítky. Pokud je jakákoli hodnota menší než 1, chybí úvodní nula. Je to stejné s poli typu peníze a malými penězi, protože jsou to desetinná místa s pevnou škálou rovnající se 4.

Přidejte počáteční nuly, pokud chybí

Počínaje verzí 5.6.0 umožňuje atribut připojení nebo příkazu PDO::SQLSRV_ATTR_FORMAT_DECIMALS uživateli formátovat desetinné řetězce. Tento atribut očekává logickou hodnotu (true nebo false) a má vliv pouze na formátování desetinných nebo číselných hodnot v načtených výsledcích. Jinými slovy, tento atribut nemá žádný vliv na jiné operace, jako je vložení nebo aktualizace.

Ve výchozím nastavení PDO::SQLSRV_ATTR_FORMAT_DECIMALS je false. Pokud je nastavena hodnota na pravda, budou přidány počáteční nuly k desetinným řetězcům pro jakoukoliv desetinnou hodnotu menší než 1.

Konfigurace počtu desetinných míst

Když PDO::SQLSRV_ATTR_FORMAT_DECIMALS je zapnuté, další připojení nebo atribut příkazu, PDO::SQLSRV_ATTR_DECIMAL_PLACESumožňuje uživatelům konfigurovat počet desetinných míst při zobrazení peněz a malých dat. Přijímá celočíselné hodnoty v rozsahu [0, 4] a zaokrouhlování může nastat, když se zobrazí. Nicméně, základní data týkající se peněz zůstávají nezměněna.

Atributy příkazu vždy přepíší odpovídající nastavení připojení. Všimněte si, že tato PDO::SQLSRV_ATTR_DECIMAL_PLACES možnost má vliv jenom na data peněz a PDO::SQLSRV_ATTR_FORMAT_DECIMALS musí být nastavená na hodnotu true. Jinak je formátování vypnuté nezávisle na nastavení PDO::SQLSRV_ATTR_DECIMAL_PLACES.

Poznámka:

Vzhledem k tomu, že pole money nebo smallmoney mají měřítko 4, bude nastavení PDO::SQLSRV_ATTR_DECIMAL_PLACES na libovolné záporné číslo nebo jakákoli hodnota větší než 4 ignorována. Nedoporučuje se používat žádná formátovaná data peněz jako vstupy do jakéhokoli výpočtu.

Nastavení atributů připojení

  • Nastavte atributy v okamžiku připojení:

    $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);
    
  • Nastavení atributů po připojení:

    $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říklad – formátování dat peněz

Následující příklad ukazuje, jak načíst finanční data pomocí 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);
?>

Příklad – přepsání parametrů připojení

Následující příklad ukazuje, jak přepsat atributy připojení:

<?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);
?>

Viz také

Formátování desetinných řetězců a hodnot peněz (ovladač SQLSRV)

Načítání dat