Memformat String Desimal dan Nilai Uang (driver PDO_SQLSRV)
Untuk mempertahankan akurasi, jenis desimal atau numerik selalu diambil sebagai string dengan presisi dan skala yang tepat. Jika ada nilai kurang dari 1, nol di depan hilang. Ini sama dengan uang dan bidang smallmoney karena bidang desimal dengan skala tetap sama dengan 4.
Tambahkan nol di awal jika hilang
Dimulai dengan versi 5.6.0, atribut PDO::SQLSRV_ATTR_FORMAT_DECIMALS
koneksi atau pernyataan memungkinkan pengguna memformat string desimal. Atribut ini mengharapkan nilai boolean (benar atau salah) dan hanya memengaruhi pemformatan nilai desimal atau numerik dalam hasil yang diambil. Dengan kata lain, atribut ini tidak berpengaruh pada operasi lain seperti penyisipan atau pembaruan.
Secara default, PDO::SQLSRV_ATTR_FORMAT_DECIMALS
adalah false. Jika diatur ke true, nol di depan ke string desimal akan ditambahkan untuk nilai desimal apa pun kurang dari 1.
Mengonfigurasi jumlah tempat desimal
Dengan PDO::SQLSRV_ATTR_FORMAT_DECIMALS
diaktifkan, atribut koneksi atau pernyataan lain, PDO::SQLSRV_ATTR_DECIMAL_PLACES
, memungkinkan pengguna untuk mengonfigurasi jumlah tempat desimal saat menampilkan uang dan data smallmoney. Ini menerima nilai bilangan bulat dalam rentang [0, 4], dan pembulatan dapat terjadi saat ditampilkan. Namun, data uang yang mendasar tetap sama.
Atribut pernyataan selalu mengambil alih pengaturan koneksi yang sesuai. Perhatikan bahwa PDO::SQLSRV_ATTR_DECIMAL_PLACES
opsi hanya memengaruhi data uang, dan PDO::SQLSRV_ATTR_FORMAT_DECIMALS
harus diatur ke true. Jika tidak, pemformatan dinonaktifkan terlepas dari PDO::SQLSRV_ATTR_DECIMAL_PLACES
pengaturannya.
Catatan
Karena bidang uang atau smallmoney memiliki skala 4, pengaturan PDO::SQLSRV_ATTR_DECIMAL_PLACES
ke angka negatif atau nilai apa pun yang lebih besar dari 4 akan diabaikan. Tidak disarankan untuk menggunakan data uang yang diformat sebagai input ke perhitungan apa pun.
Untuk mengatur atribut koneksi
Atur atribut di titik koneksi:
$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);
Atur koneksi posting atribut:
$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);
Contoh - memformat data uang
Contoh berikut menunjukkan cara mengambil data uang menggunakan 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);
?>
Contoh - mengambil alih atribut koneksi
Contoh berikut menunjukkan cara mengambil alih atribut koneksi:
<?php
$database = 'myDatabase';
$server = 'myServer';
$username = 'myuser';
$password = 'mypassword'
$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);
?>