Aracılığıyla paylaş


Ondalık Dizeleri ve Para Değerlerini Biçimlendirme (PDO_SQLSRV Sürücüsü)

PHP sürücüsünü indirme

Doğruluğu korumak için ondalık veya sayısal türler her zaman tam duyarlıklara ve ölçeklere sahip dizeler olarak getirilir. Herhangi bir değer 1'den küçükse, baştaki sıfır eksiktir. Sabit ölçek 4'e eşit ondalık alanlar olduğu için para ve küçük para alanlarıyla aynıdır.

Eksikse baştaki sıfırları ekleyin

5.6.0 sürümünden başlayarak, bağlantı veya deyim özniteliği PDO::SQLSRV_ATTR_FORMAT_DECIMALS kullanıcının ondalık dizeleri biçimlendirmesine olanak tanır. Bu öznitelik bir boole değeri (true veya false) bekler ve yalnızca getirilen sonuçlardaki ondalık veya sayısal değerlerin biçimlendirmesini etkiler. Başka bir deyişle, bu özniteliğin ekleme veya güncelleştirme gibi diğer işlemler üzerinde hiçbir etkisi yoktur.

Varsayılan olarak PDO::SQLSRV_ATTR_FORMAT_DECIMALSfalse değeridir. True olarak ayarlanırsa, 1'den küçük herhangi bir ondalık değer için ondalık dizelere baştaki sıfırlar eklenir.

Ondalık basamak sayısını yapılandırma

PDO::SQLSRV_ATTR_FORMAT_DECIMALS Açık durumdayken, başka bir bağlantı veya deyim özniteliği olan PDO::SQLSRV_ATTR_DECIMAL_PLACES, kullanıcıların para ve küçük para verilerini görüntülerken ondalık basamak sayısını yapılandırmasına olanak tanır. [0, 4] aralığındaki tamsayı değerlerini kabul eder ve gösterildiğinde yuvarlama oluşabilir. Ancak, temel alınan para verileri aynı kalır.

Deyim öznitelikleri her zaman ilgili bağlantı ayarlarını geçersiz kılar. Bu seçeneğin PDO::SQLSRV_ATTR_DECIMAL_PLACESyalnızca para verilerini etkilediğini ve PDO::SQLSRV_ATTR_FORMAT_DECIMALS true olarak ayarlanması gerektiğini unutmayın. Aksi takdirde, PDO::SQLSRV_ATTR_DECIMAL_PLACES ayarından bağımsız olarak biçimlendirme kapatılır.

Uyarı

Para veya küçük para alanlarının ölçeği 4 olduğundan, PDO::SQLSRV_ATTR_DECIMAL_PLACES negatif bir sayıya veya 4'ten büyük bir değere ayarlandığında görmezden gelinir. Biçimlendirilmiş para verilerinin herhangi bir hesaplamaya giriş olarak kullanılması önerilmez.

Bağlantı özniteliklerini ayarlamak için

  • Bağlantı noktasında öznitelikleri ayarlayın:

    $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);
    
  • Bağlantıdan sonra öznitelikleri ayarlayın:

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

Örnek - para verilerini biçimlendirme

Aşağıdaki örnekte , PDOStatement::bindColumn kullanılarak para verilerinin nasıl getirilme yöntemi gösterilmektedir:

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

Örnek - bağlantı özniteliklerini geçersiz kılma

Aşağıdaki örnekte bağlantı özniteliklerinin nasıl geçersiz kılınacakları gösterilmektedir:

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

Ayrıca Bkz.

Ondalık Dizeleri ve Para Değerlerini Biçimlendirme (SQLSRV Sürücüsü)

Veri Alınıyor