Condividi tramite


Procedura: Recuperare i tipi di data e ora come oggetti DateTime PHP usando il driver PDO_SQLSRV

Download del driver PHP

Questa funzionalità, aggiunta nella versione 5.6.0, è valida solo quando si usa il driver SQLSRV per Microsoft Driver per PHP per SQL Server.

Per recuperare i tipi di data e ora come oggetti DateTime

Quando si usa PDO_SQLSRV, i tipi di data e ora (smalldatetime, DateTime, date, Time, datetime2 e DateTimeOffset) vengono restituiti per impostazione predefinita come stringhe. Né l'attributo DOP::ATTR_STRINGIFY_FETCHES né l'attributo DOP::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE hanno alcun effetto. Per recuperare i tipi di data e ora come oggetti PHP DateTime, impostare l'attributo di connessione o di istruzione PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE su truefalse per impostazione predefinita).

Nota

Questo attributo di connessione o di istruzione si applica solo al recupero regolare dei tipi di data e ora perché gli oggetti DateTime non possono essere specificati come parametri di output.

Esempio: usare l'attributo di connessione

Negli esempi seguenti viene omesso il controllo degli errori per chiarezza. In questo esempio viene illustrato come impostare l'attributo di connessione:

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

Esempio: usare l'attributo di istruzione

In questo esempio viene illustrato come impostare l'attributo di istruzione:

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

Esempio: usare l'opzione dell'istruzione

In alternativa, è possibile impostare l'attributo di istruzione come opzione:

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

Esempio: recuperare i tipi di data e ora come stringhe

Nell'esempio seguente viene illustrato come ottenere il contrario, che non è effettivamente necessario essendo false per impostazione predefinita:

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

Vedi anche

Recupero di dati

Recuperare i tipi di data e ora come stringhe usando il driver SQLSRV