如何:使用 SQLSRV 驱动程序以字符串的形式检索日期和时间类型

下载 PHP 驱动程序

将 SQLSRV 驱动程序用于 Microsoft Drivers for PHP for SQL Server 时,可以通过在连接字符串中或在语句级别指定以下选项,以字符串的形式检索日期和时间类型(smalldatetime、datetime、date、time、datetime2 和 datetimeoffset):

'ReturnDatesAsStrings'=>true

默认值是 false,这意味着 smalldatetime、datetime、date、time、datetime2 和 datetimeoffset 类型将返回为 PHP DateTime 对象。 如果在语句级别设置此选项,则它将替代连接级别设置。

默认情况下,PDO_SQLSRV 驱动程序以字符串的形式返回日期和时间类型。 若要以 PHP DateTime 对象形式进行检索,请参阅如何:使用 PDO_SQLSRV 以 PHP Datetime 对象形式检索日期和时间类型

示例 1

以下示例演示的语法可用于指定要以字符串的形式检索日期和时间类型。

<?php
$serverName = "MyServer";
$connectionInfo = array("Database"=>"AdventureWorks", 'ReturnDatesAsStrings'=> true);
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
   echo "Could not connect.\n";
   die(print_r(sqlsrv_errors(), true));
}

sqlsrv_close($conn);
?>

示例 2

以下示例演示当检索字符串时,通过指定 UTF-8 可以字符串的形式检索日期,即使连接是使用 "ReturnDatesAsStrings" => false 建立的也是如此。

<?php
$serverName = "MyServer";
$connectionInfo = array("Database"=>"AdventureWorks", "ReturnDatesAsStrings" => false);
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
   echo "Could not connect.\n";
   die(print_r(sqlsrv_errors(), true));
}

$tsql = "SELECT VersionDate FROM AWBuildVersion";

$stmt = sqlsrv_query($conn, $tsql);

if ($stmt === false) {
   echo "Error in statement preparation/execution.\n";
   die(print_r(sqlsrv_errors(), true));
}

sqlsrv_fetch($stmt);

// retrieve date as string
$date = sqlsrv_get_field($stmt, 0, SQLSRV_PHPTYPE_STRING("UTF-8"));

if ($date === false) {
   die(print_r(sqlsrv_errors(), true));
}

echo $date;

sqlsrv_close($conn);
?>

示例 3

以下示例演示如何通过在连接字符串中指定 UTF-8 和 "ReturnDatesAsStrings" => true 来以字符串的形式检索日期。

<?php
$serverName = "MyServer";
$connectionInfo = array("Database"=>"AdventureWorks", 'ReturnDatesAsStrings'=> true, "CharacterSet" => 'utf-8');
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
   echo "Could not connect.\n";
   die(print_r(sqlsrv_errors(), true));
}

$tsql = "SELECT VersionDate FROM AWBuildVersion";

$stmt = sqlsrv_query($conn, $tsql);

if ($stmt === false) {
   echo "Error in statement preparation/execution.\n";
   die(print_r(sqlsrv_errors(), true));
}

sqlsrv_fetch($stmt);

// retrieve date as string
$date = sqlsrv_get_field($stmt, 0);

if ($date === false) {
   die(print_r(sqlsrv_errors(), true));
}

echo $date;
sqlsrv_close($conn);
?>

示例 4

以下示例演示如何以 PHP 类型的形式检索日期。 'ReturnDatesAsStrings'=> false 处于打开状态。

<?php
$serverName = "MyServer";
$connectionInfo = array("Database"=>"AdventureWorks");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
   echo "Could not connect.\n";
   die(print_r(sqlsrv_errors(), true));
}

$tsql = "SELECT VersionDate FROM AWBuildVersion";

$stmt = sqlsrv_query($conn, $tsql);

if ($stmt === false) {
   echo "Error in statement preparation/execution.\n";
   die(print_r(sqlsrv_errors(), true));
}

sqlsrv_fetch($stmt);

// retrieve date as a DateTime object, then convert to string using PHP's date_format function
$date = sqlsrv_get_field($stmt, 0);

if ($date === false) {
   die(print_r(sqlsrv_errors(), true));
}

$date_string = date_format($date, 'jS, F Y');
echo "Date = $date_string\n";

sqlsrv_close($conn);
?>

示例 5

在语句级别设置的 ReturnDatesAsStrings 选项将替代相应的连接选项。

<?php
$serverName = 'MyServer';
$connectionInfo = array('Database' => 'MyDatabase', 'ReturnDatesAsStrings' => false);
$conn = sqlsrv_connect($serverName, $connectionInfo);
if ($conn === false) {
   echo "Could not connect.\n";
   die(print_r(sqlsrv_errors(), true));
}

$tableName = 'MyTable';
$options = array('ReturnDatesAsStrings' => true);
$query = "SELECT DateTimeCol FROM $tableName";
$stmt = sqlsrv_prepare($conn, $query, array(), $options);
if ($stmt === false) {
   echo "Error in statement preparation/execution.\n";
   die(print_r(sqlsrv_errors(), true));
}
sqlsrv_execute($stmt);

// Expect the fetched value to be a string
$field = sqlsrv_get_field($stmt, 0);
echo $field . PHP_EOL;

sqlsrv_close($conn);
?>

另请参阅

检索数据

如何:使用 PDO_SQLSRV 以 PHP Datetime 对象形式检索日期和时间类型