Dela via


Anvisningar: Hämta datum- och tidstyper som PHP DateTime-objekt med hjälp av PDO_SQLSRV-drivrutinen

Ladda ned PHP-drivrutin

Den här funktionen, som lades till i version 5.6.0, är endast giltig när du använder PDO_SQLSRV drivrutinen för Microsoft Drivers for PHP för SQL Server.

Hämta datum- och tidstyper som DateTime-objekt

När du använder PDO_SQLSRV returneras datum- och tidstyper (smalldatetime, datetime, date, time, datetime2 och datetimeoffset) som standard som strängar. Varken attributet PDO::ATTR_STRINGIFY_FETCHES eller PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE har någon effekt. För att hämta datum- och tidstyper som PHP DateTime-objekt anger du anslutnings- eller instruktionsattributet PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE till sant (det är falskt som standard).

Anmärkning

Det här anslutnings- eller instruktionsattributet gäller endast för vanlig hämtning av datum- och tidstyper eftersom DateTime-objekt inte kan anges som utdataparametrar.

Exempel – använd anslutningsattributet

I följande exempel utelämnas felkontroll för tydlighetens skull. Den här visar hur du anger anslutningsattributet:

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

Exempel – använd attributet 'uttryck'

Det här exemplet visar hur du anger instruktionsattributet:

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

Exempel – använd instruktionsalternativet

Alternativt kan instruktionsattributet anges som ett alternativ:

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

Exempel: hämta "datetime"-typer som strängar

I följande exempel visas hur du uppnår motsatsen (vilket egentligen inte är nödvändigt eftersom det är falskt som standard):

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

Se även

Hämtar data

Hämta datum- och tidstyper som strängar med hjälp av SQLSRV-drivrutinen