【问题标题】:echo DATETIME from SQL SERVER throws 500 error从 SQL SERVER 回显 DATETIME 抛出 500 错误
【发布时间】:2014-04-16 09:19:46
【问题描述】:

我正在运行以下代码:

<?php

include "php/connection.php";

$data = $_GET['data'];

$tsql = "SELECT * FROM Customer WHERE CustomerNumber = ".$data;
$result = sqlsrv_query($link, $tsql);

$row = sqlsrv_fetch_array($result);

echo $row['endDate']->format("Y-m-d H:i:s");

?>

结果集的收集没有问题,问题在于尝试将其作为字符串输出,因为这会引发 500 错误,我怀疑这是因为它作为对象返回但无论我尝试什么我都无法获得数据作为字符串。

endDate 列以这种格式保存数据:

2015-04-16 08:22:00.000

该列是“日期时间”格式。

编辑:

代码已更改以反映当前代码,回显现在显示“1900-01-01 00:00:00”,但应显示的实际数据是“2015-04-16 08:22:00.000”

【问题讨论】:

  • var_dump($row) 显示了什么?
  • 您可以尝试对数据进行print_r,并且您可以尝试不回显某些内容...如果您也遇到了 500 错误,那么还有另一个问题,然后回显对象...
  • [endDate] => DateTime 对象([date] => 1900-01-01 00:00:00 [timezone_type] => 3 [timezone] => Europe/Dublin)
  • 在您的连接选项technet.microsoft.com/en-us/library/ff628167(v=sql.105).aspx中将ReturnDatesAsStrings设置为true

标签: php sql datetime


【解决方案1】:

您的日期保存为 DateTime 对象,因此不会显示。

这是一个例子

datetest = new DateTime();
$row = array();
$row["endDate"] = $datetest;
print_r($datetest);
echo "End Date :: ".$row["endDate"]->format("Y-m-d H:i:s");

print_r() 语句将打印一些内容为

DateTime Object ( [date] => 2014-04-16 15:04:41 [timezone_type] => 3 [timezone] => Asia/Calcutta )

在你的情况下是一样的。

所以你的情况

   echo $row['endDate']->format("Y-m-d H:i:s");

【讨论】:

  • 谢谢,这改变了响应,但数据返回为:1900-01-01 00:00:00 而实际数据是 2015-04-16 08:22:00.000
  • 你的变量转储显示它的 1900-01-01 00:00:00,它可能在代码中生成结果集时的某个地方。
【解决方案2】:

通过在我的连接选项中将 ReturnDatesAsStrings 设置为 true 解决了这个问题,这是一个示例:

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

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多