Bagikan melalui


Memformat String Desimal dan Nilai Uang (driver PDO_SQLSRV)

Unduh driver PHP

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

Lihat Juga

Memformat String Desimal dan Nilai Uang (Driver SQLSRV)

Mengambil Data