Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
För att bevara noggrannhet hämtas alltid decimaler eller numeriska typer som strängar med exakta precisioner och skalor. Om något värde är mindre än 1 saknas den inledande nollpunkten. Det är samma sak med pengar och smallmoney-fält eftersom de är decimalfält med en fast skala som är lika med 4.
Lägg till inledande nolla om det saknas
Från och med version 5.6.0 tillåter anslutnings- eller instruktionsattributet PDO::SQLSRV_ATTR_FORMAT_DECIMALS användaren att formatera decimalsträngar. Det här attributet förväntar sig ett booleskt värde (sant eller falskt) och påverkar endast formateringen av decimal- eller numeriska värden i de hämtade resultaten. Med andra ord har det här attributet ingen effekt på andra åtgärder som infogning eller uppdatering.
Standardmässigt är PDO::SQLSRV_ATTR_FORMAT_DECIMALSfalskt. Om värdet är true läggs de inledande nollorna till decimalsträngar för ett decimalvärde som är mindre än 1.
Konfigurera antalet decimaler
Med PDO::SQLSRV_ATTR_FORMAT_DECIMALS aktiverat tillåter ett annat anslutnings- eller instruktionsattribut, PDO::SQLSRV_ATTR_DECIMAL_PLACES, användare att konfigurera antalet decimaler när de visar pengar och smallmoney-data. Det accepterar heltalsvärden i intervallet [0, 4], och avrundning kan inträffa när det visas. De underliggande penningdata förblir dock desamma.
Instruktionsattributen åsidosätter alltid motsvarande anslutningsinställningar. Observera att alternativet PDO::SQLSRV_ATTR_DECIMAL_PLACESendast påverkar pengadata och PDO::SQLSRV_ATTR_FORMAT_DECIMALS måste anges till sant. Annars inaktiveras formateringen oavsett PDO::SQLSRV_ATTR_DECIMAL_PLACES inställning.
Anmärkning
Eftersom money- eller smallmoney-fälten har fyra decimaler, kommer PDO::SQLSRV_ATTR_DECIMAL_PLACES att ignoreras om det ställs in på ett negativt tal eller ett värde större än 4. Vi rekommenderar inte att du använder formaterade pengadata som indata till någon beräkning.
Så här anger du anslutningsattributen
Ange attribut vid anslutningspunkten:
$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);Ställ in attribut efter anslutning:
$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);
Exempel – formatera pengadata
I följande exempel visas hur du hämtar pengadata med hjälp av 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);
?>
Exempel – åsidosätta anslutningsattribut
I följande exempel visas hur du åsidosätter anslutningsattributen:
<?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);
?>
Se även
Formatera decimalsträngar och penningvärden (SQLSRV-drivrutin)