Partager via


Procédure : récupérer des types date et heure sous forme d’objets DateHeure PHP à l’aide du pilote PDO_SQLSRV

Télécharger le pilote PHP

Cette fonctionnalité, ajoutée dans la version 5.6.0, est valide uniquement quand vous utilisez le pilote PDO_SQLSRV pour Pilotes Microsoft SQL Server pour PHP.

Pour récupérer des types de date et heure en tant qu’objets DateTime

Lors de l’utilisation de PDO_SQLSRV, les types de date et heure (smalldatetime, datetime, date, time, datetime2et datetimeoffset) sont renvoyés en tant que chaînes par défaut. Ni l’attribut PDO::ATTR_STRINGIFY_FETCHES ni l’attribut PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE n’ont d’effet. Pour récupérer des types de date et heure en tant qu’objets DateTime PHP, définissez l’attribut de connexion ou d’instruction PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE sur true (il s’agit de false par défaut).

Notes

Cet attribut de connexion ou d’instruction s’applique uniquement à la récupération normale des types de date et heure, car les objets DateTime ne peuvent pas être spécifiés en tant que paramètres de sortie.

Exemple : utilisation de l’attribut de connexion

Les exemples suivants omettent la vérification des erreurs par souci de clarté. Celui-ci montre comment définir l’attribut de connexion :

<?php
$server = 'myserver';
$databaseName = 'mydatabase';
$username = 'myusername';
$passwd = 'mypasword';
$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);
?>

Exemple : utilisation de l’attribut d’instruction

Cet exemple montre comment définir l’attribut d’instruction :

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

Exemple : utilisation de l’option d’instruction

L’attribut d’instruction peut également être défini en tant qu’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);
?>

Exemple : récupérer des types datetime en tant que chaînes

L’exemple suivant montre comment obtenir l’inverse (ce qui n’est pas vraiment nécessaire, car il s’agit d’une valeur false par défaut) :

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

Voir aussi

Récupération de données

Récupérer des types date et heure sous forme de chaînes à l’aide du pilote SQLSRV