Aracılığıyla paylaş


Nasıl yapılır: PDO_SQLSRV Sürücüsünü Kullanarak Tarih ve Saat Türlerini PHP DateTime Nesneleri Olarak Alma

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

Sürüm 5.6.0'da eklenen bu özellik yalnızca SQL Server için PHP için Microsoft Sürücüleri'nin PDO_SQLSRV sürücüsü kullanıldığında geçerlidir.

Tarih ve saat türlerini DateTime nesneleri olarak almak için

PDO_SQLSRV kullanılırken, tarih ve saat türleri (smalldatetime, datetime, date, time, datetime2 ve datetimeoffset) varsayılan olarak dize olarak döndürülür. Ne PDO::ATTR_STRINGIFY_FETCHES ne de PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE özniteliğinin hiçbir etkisi olmaz. Tarih ve saat türlerini PHP DateTime nesneleri olarak almak için bağlantı veya deyim özniteliğini PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPEtrue (varsayılan olarak false ) olarak ayarlayın.

Uyarı

Bu bağlantı veya deyim özniteliği yalnızca tarih ve saat türlerinin düzenli olarak alınması için geçerlidir çünkü DateTime nesneleri çıkış parametresi olarak belirtilemez.

Örnek - bağlantı özniteliğini kullanma

Aşağıdaki örneklerde netlik için hata denetimi atlanmıştır. Bu, bağlantı özniteliğinin nasıl ayarlandığını gösterir:

<?php
$server = 'myserver';
$databaseName = 'mydatabase';
$username = 'myusername';
$passwd = '<password>';
$tableName = 'mytable';

$conn = new PDO("sqlsrv:Server = $server; Database = $databaseName", $username, $passwd);

// To set the connection attribute
$conn->setAttribute(PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE, true);
$query = "SELECT DateTimeCol FROM $tableName";
$stmt = $conn->prepare($query);
$stmt->execute();

// Expect a DateTimeCol value as a PHP DateTime type
$row = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($row);

unset($stmt);
unset($conn);
?>

Örnek - deyimi özniteliğini kullanma

Bu örnekte deyimi özniteliğinin nasıl ayarlanacağı gösterilmektedir:

<?php
$database = "test";
$server = "(local)";
$conn = new PDO("sqlsrv:server = $server; Database = $database", "", "");
$query = "SELECT DateTimeCol FROM myTable";
$stmt = $conn->prepare($query);
$stmt->setAttribute(PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE, true);
$stmt->execute();

// Expect a DateTimeCol value as a PHP DateTime type
$row = $stmt->fetch(PDO::FETCH_NUM);
var_dump($row);

unset($stmt);
unset($conn);
?>

Örnek - deyimi seçeneğini kullanın

Alternatif olarak, deyimi özniteliği bir seçenek olarak ayarlanabilir:

<?php
$database = "test";
$server = "(local)";
$conn = new PDO("sqlsrv:server = $server; Database = $database", "", "");

$dateObj = null;
$query = "SELECT DateTimeCol FROM aTable";
$options = array(PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE => true);
$stmt = $conn->prepare($query, $options);
$stmt->execute();
$stmt->bindColumn(1, $dateObj, PDO::PARAM_LOB);
$row = $stmt->fetch(PDO::FETCH_BOUND);
var_dump($dateObj);

unset($stmt);
unset($conn);
?>

Örnek - datetime türlerini string olarak alma

Aşağıdaki örnekte bunun tam tersini nasıl gerçekleştirebileceğiniz gösterilmektedir (varsayılan olarak false olduğundan bu gerçekten gerekli değildir):

<?php
$database = "MyData";
$conn = new PDO("sqlsrv:server = (local); Database = $database");

$dateStr = null;
$query = 'SELECT DateTimeCol FROM table1';
$options = array(PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE => false);
$stmt = $conn->prepare($query, $options);
$stmt->execute();
$stmt->bindColumn(1, $dateStr);
$row = $stmt->fetch(PDO::FETCH_BOUND);
echo $dateStr . PHP_EOL;

unset($stmt);
unset($conn);
?>

Ayrıca Bkz.

Veri Alınıyor

SQLSRV Sürücüsünü Kullanarak Tarih ve Saat Türlerini Dize Olarak Alma