Поделиться через


Как извлечь типы даты и времени в виде объектов даты и времени PHP с помощью драйвера PDO_SQLSRV

Скачать драйвер PHP

Эта функция, добавленная в версию 5.6.0, действительна только при использовании драйвера PDO_SQLSRV для драйверов Майкрософт для PHP для SQL Server.

Порядок извлечения типов даты и времени в виде объектов DateTime

При использовании PDO_SQLSRV типы даты и времени (smalldatetime, datetime, date, time, datetime2 и datetimeoffset) по умолчанию возвращаются в виде строк. Ни PDO::ATTR_STRINGIFY_FETCHES, ни атрибут PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE не оказывает никакого влияния. Чтобы получить типы даты и времени в виде объектов PHP DateTime, установите атрибут connection или statement на PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE true (по умолчанию false).

Примечание.

Эти атрибуты connection или statement применяются только к обычной выборке типов даты и времени, так как объекты DateTime нельзя указать в качестве параметров вывода.

Пример. Использование атрибута connection

В следующих примерах не выполняется проверка ошибок для ясности. В этом примере показано, как задать атрибут connection.

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

Пример. Использование атрибута statement

В этом примере показано, как задать атрибут statement.

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

Пример. Использование statement в качестве параметра

Кроме того, атрибут statement можно использовать в качестве параметра.

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

Пример. Извлечение типов datetime в виде строк

Следующий пример показывает, как достичь противоположного (что на самом деле не обязательно, так как по умолчанию задано false):

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

См. также

Извлечение данных

Извлечение типов даты и времени в виде строк с помощью драйвера SQLSRV