Share via


Decimale tekenreeksen en geldwaarden opmaken (PDO_SQLSRV stuurprogramma)

PHP-stuurprogramma downloaden

Om nauwkeurigheid te behouden, worden decimale of numerieke typen altijd opgehaald als tekenreeksen met exacte precisie en schalen. Als een waarde kleiner is dan 1, ontbreekt de voorloopnul. Het is hetzelfde met geldvelden en kleingeldvelden zoals decimale velden zijn met een vaste schaal gelijk aan 4.

Voorloopnullen toevoegen als deze ontbreken

Vanaf versie 5.6.0 kan de gebruiker met het verbindings- of instructiekenmerk PDO::SQLSRV_ATTR_FORMAT_DECIMALS decimale tekenreeksen opmaken. Dit kenmerk verwacht een Booleaanse waarde (waar of onwaar) en is alleen van invloed op de opmaak van de decimale of numerieke waarden in de opgehaalde resultaten. Met andere woorden, dit kenmerk heeft geen effect op andere bewerkingen, zoals invoegen of bijwerken.

Is standaard PDO::SQLSRV_ATTR_FORMAT_DECIMALSonwaar. Als deze waarde is ingesteld op true, worden de voorloopnullen toegevoegd aan decimale tekenreeksen die kleiner zijn dan 1.

Aantal decimalen configureren

Met PDO::SQLSRV_ATTR_FORMAT_DECIMALS ingeschakeld, een ander verbindings- of instructiekenmerk, PDO::SQLSRV_ATTR_DECIMAL_PLACESkunnen gebruikers het aantal decimalen configureren bij het weergeven van geld en kleine gegevens. Het accepteert gehele getallen in het bereik van [0, 4], en afronding kan optreden wanneer de waarden worden weergegeven. De onderliggende geldgegevens blijven echter hetzelfde.

De instructiekenmerken overschrijven altijd de bijbehorende verbindingsinstellingen. Houd er rekening mee dat de PDO::SQLSRV_ATTR_DECIMAL_PLACES optie alleen van invloed is op geldgegevens en PDO::SQLSRV_ATTR_FORMAT_DECIMALS moet worden ingesteld op waar. Anders is opmaak uitgeschakeld, ongeacht PDO::SQLSRV_ATTR_DECIMAL_PLACES de instelling.

Opmerking

Omdat geld- of kleine velden schaal 4 hebben, wordt het instellen PDO::SQLSRV_ATTR_DECIMAL_PLACES op een negatief getal of een waarde die groter is dan 4 genegeerd. Het wordt niet aanbevolen om opgemaakte geldgegevens te gebruiken als invoer voor elke berekening.

De verbindingskenmerken instellen

  • Kenmerken instellen op het punt van verbinding:

    $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);
    
  • Kenmerken instellen na verbinding:

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

Voorbeeld: geldgegevens opmaken

In het volgende voorbeeld ziet u hoe u geldgegevens ophaalt met behulp van 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);
?>

Voorbeeld: verbindingskenmerken overschrijven

In het volgende voorbeeld ziet u hoe u de verbindingskenmerken overschrijft:

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

Zie ook

Decimale tekenreeksen en geldwaarden opmaken (SQLSRV-stuurprogramma)

Gegevens ophalen