Compartir a través de


Recuperación de los tipos de fecha y hora como objetos de fecha y hora PHP mediante el controlador PDO_SQLSRV

Descargar controlador PHP

Esta característica, agregada en la versión 5.6.0, solo es válida cuando se utiliza el controlador PDO_SQLSRV para dichos Controladores de Microsoft para PHP para SQL Server.

Para recuperar los tipos de fecha y hora como objetos DateTime

Al usar PDO_SQLSRV, los tipos de fecha y hora (smalldatetime, datetime, date, time, datetime2 y datetimeoffset) se devuelven de forma predeterminada como cadenas. Ni el atributo PDO::ATTR_STRINGIFY_FETCHES ni PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE tienen ningún efecto. Para recuperar los tipos de fecha y hora como objetos DateTime PHP, establezca el atributo de conexión o instrucción PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE en true (es false de forma predeterminada).

Nota

Este atributo de conexión o instrucción solo se aplica a la captura normal de tipos de fecha y hora, ya que los objetos DateTime no se pueden especificar como parámetros de salida.

Ejemplo: usar el atributo de conexión

En los siguientes ejemplos se omite la comprobación de errores para una mayor claridad. En este se muestra cómo establecer el atributo de conexión:

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

Ejemplo: usar el atributo de instrucción

En este ejemplo se muestra cómo establecer el atributo de instrucción:

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

Ejemplo: usar la opción de instrucción

Como alternativa, el atributo de instrucción se puede establecer como opción:

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

Ejemplo: recuperar los tipos de fecha y hora como cadenas

En el siguiente ejemplo se muestra cómo lograr lo contrario (que no es realmente necesario, puesto que es false de forma predeterminada):

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

Consulte también

Recuperación de datos

Recuperación de los tipos de fecha y hora como cadenas con el controlador SQLSRV