次の方法で共有


方法:SQLSRV ドライバーを使用して日付/時刻型を文字列として取得する

PHP ドライバーのダウンロード

Microsoft SQL Server 用 Drivers for PHP に SQLSRV ドライバーを使用する場合、日付と時刻の型 (smalldatetimedatetimedatetimedatetime2、および datetimeoffset) を文字列として取得するには、接続文字列またはステートメント レベルで次のオプションを指定します。

'ReturnDatesAsStrings'=>true

既定値は false です。つまり、smalldatetimedatetimedatetimedatetime2datetimeoffset 型は 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 オブジェクトとして取得する