如何:使用 PDO_SQLSRV 驅動程式以 PHP 日期時間物件形式擷取日期和時間類型

下載 PHP 驅動程式

此功能 (於 5.6.0 版中新增) 只有在使用適用於用於 SQL Server 之 PHP 的 Microsoft 驅動程式的 PDO_SQLSRV 驅動程式時才有效。

以 DateTime 物件形式擷取日期和時間類型

使用 PDO_SQLSRV 時,日期和時間類型 (smalldatetimedatetimedatetimedatetime2datetimeoffset) 預設會以字串形式傳回。 PDO::ATTR_STRINGIFY_FETCHES 或 PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE 屬性都不會有任何作用。 若要以 PHP DateTime \(英文\) 物件的形式擷取日期和時間類型,請將連線或陳述式屬性 PDO::SQLSRV_ATTR_FETCHES_DATETIME_TYPE 設定為 true (其預設為 false)。

注意

此連線或陳述式屬性僅適用於日期和時間類型的一般擷取,因為無法將 DateTime 物件指定為輸出參數。

範例 - 使用連線屬性

為了清楚起見,下列範例會省略錯誤檢查。 此範例示範如何設定連線屬性:

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

範例 - 使用陳述式屬性

此範例示範如何設定陳述式屬性:

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

範例 - 使用陳述式選項

或者,也能以選項的形式設定陳述式屬性:

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

範例 - 以字串形式擷取日期時間類型

下列範例示範如何達成相反的情況 (這並非真的必要,因為其預設已為 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 驅動程式以字串形式擷取日期和時間類型