Skip to content

Latest commit

 

History

History
125 lines (101 loc) · 4.09 KB

how-to-retrieve-datetime-objects-using-pdo-sqlsrv-driver.md

File metadata and controls

125 lines (101 loc) · 4.09 KB
title description author ms.author ms.date ms.service ms.subservice ms.topic helpviewer_keywords
How to: retrieve date and time types as PHP DateTime objects using the PDO_SQLSRV driver
This topic describes how to retrieve date and time types as PHP DateTime objects when using the Microsoft PDO_SQLSRV Driver for PHP for SQL Server
David-Engel
davidengel
08/10/2020
sql
connectivity
conceptual
date and time types, retrieving as datetime objects

How to: Retrieve Date and Time Types as PHP DateTime Objects Using the PDO_SQLSRV Driver

[!INCLUDEDriver_PHP_Download]

This feature, added in version 5.6.0, is only valid when using the PDO_SQLSRV driver for the [!INCLUDEssDriverPHP].

To retrieve date and time types as DateTime objects

When using PDO_SQLSRV, date and time types (smalldatetime, datetime, date, time, datetime2, and datetimeoffset) are by default returned as strings. Neither the PDO::ATTR_STRINGIFY_FETCHES nor the PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE attribute has any effect. In order to retrieve date and time types as PHP DateTime objects, set the connection or statement attribute PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE to true (it is false by default).

Note

This connection or statement attribute only applies to regular fetching of date and time types because DateTime objects cannot be specified as output parameters.

Example - use the connection attribute

The following examples omit error checking for clarity. This one shows how to set the connection attribute:

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

Example - use the statement attribute

This example shows how to set the statement attribute:

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

Example - use the statement option

Alternatively, the statement attribute can be set as an option:

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

Example - retrieve datetime types as strings

The following example shows how to achieve the opposite (which is not really necessary because it is false by default):

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

See Also

Retrieving Data

Retrieve Date and Time Types as Strings Using the SQLSRV Driver