Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Um die Genauigkeit zu wahren, werden Dezimal- oder numerische Typen immer als Zeichenfolgen mit exakter Präzision und Skalierung abgerufen. Wenn ein Wert geringer als 1 ist, fehlt die führende Null. Gleiches gilt für die Felder „money“ und „smallmoney“, da es sich um Dezimalfelder mit einer festen Anzahl von Dezimalzeichen (4) handelt.
Fehlende führende Nullen hinzufügen
Ab Version 5.6.0 können Benutzer Dezimalzeichenfolgen über das Verbindungs- oder Anweisungsattribut PDO::SQLSRV_ATTR_FORMAT_DECIMALS formatieren. Dieses Attribut erwartet einen booleschen Wert (true oder false) und wirkt sich nur auf die Formatierung der Dezimal- oder numerischen Werte in den abgerufenen Ergebnissen aus. Mit anderen Worten: Dieses Attribut hat keine Auswirkung auf andere Operationen wie Einfügen oder Aktualisieren.
Standardmäßig ist PDO::SQLSRV_ATTR_FORMAT_DECIMALSfalse. Bei Festlegung auf „true“ werden führende Nullen zu Dezimalzeichenfolgen hinzugefügt, wenn der Dezimalwert geringer als 1 ist.
Konfigurieren der Anzahl von Dezimalstellen
Wenn PDO::SQLSRV_ATTR_FORMAT_DECIMALS aktiviert ist, können Benutzer mit einem weiteren Verbindungs- oder Anweisungsattribut, PDO::SQLSRV_ATTR_DECIMAL_PLACES, die Anzahl der Dezimalstellen bei der Anzeige von money- und smallmoney-Daten konfigurieren. Für dieses Attribut können ganzzahlige Werte von 0-4 angegeben werden. Bei der Anzeige werden die Werte möglicherweise gerundet. Die zugrunde liegenden Währungsdaten bleiben jedoch unverändert.
Anweisungsattribute setzen die entsprechenden Verbindungseinstellungen stets außer Kraft. Beachten Sie, dass sich die Option PDO::SQLSRV_ATTR_DECIMAL_PLACESausschließlich auf money-Daten auswirkt und PDO::SQLSRV_ATTR_FORMAT_DECIMALS auf „true“ festgelegt sein muss. Anderenfalls ist die Formatierung unabhängig von der Einstellung PDO::SQLSRV_ATTR_DECIMAL_PLACES deaktiviert.
Hinweis
Da die Felder „money“ und „smallmoney“ über 4 Dezimalzeichen verfügen, wird PDO::SQLSRV_ATTR_DECIMAL_PLACES ignoriert, wenn ein negativer Wert oder ein höherer Wert als 4 festgelegt wird. Es wird nicht empfohlen, formatierte money-Daten als Eingabe für Berechnungen zu verwenden.
Festlegen der Verbindungsattribute
So legen Sie Attribute für den Verbindungspunkt fest:
$attrs = array(PDO::SQLSRV_ATTR_FORMAT_DECIMALS => true, PDO::SQLSRV_ATTR_DECIMAL_PLACES => 2); $conn = new PDO("sqlsrv:Server = <server>; Database = <database>", $username, $password, $attrs);Attribute nach dem Verbinden festlegen:
$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);
Beispiel – Gelddaten formatieren
Das folgende Beispiel zeigt, wie money-Daten mithilfe von PDOStatement::bindColumn abgerufen werden:
<?php
$database = "<database>";
$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);
?>
Beispiel: Außerkraftsetzung von Verbindungsattributen
Das folgende Beispiel zeigt, wie Sie die Verbindungsattribute außer Kraft setzen:
<?php
$database = '<database>';
$server = '<server>';
$username = '<user_id>';
$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);
?>