在MSSQL smalldatetime上使用sqlsrv_get_field时出现500错误

时间:2014-11-13 17:26:39

标签: php sql-server date datetime

我还有更多的PHP问题,但这次使用的是DateTime类。

这是我实际代码的一部分:

//setup $dbc and $dbcOptions

function test($database, $databaseoptions, $termcode, $department)
{
  $tsql = "SELECT StartDate, StopDate 
           FROM CourseRecords 
           WHERE TermCode = '" .$termcode. "' AND Department = '" .$department. "';";
  $params = array();
  $stmt = sqlsrv_query($database, $tsql, $params, $databaseoptions); //---Query ALL the things!!!

  if( $stmt === false ) {
    echo 'This page is broken<br />';
    die( print_r( sqlsrv_errors(), true));
  }

  return $stmt;
}

$results = test($dbc, $dbcOptions, "142s", "CSC");

$rows = sqlsrv_num_rows($results);
echo "rows = " .$rows;
for ($i = 0; $i < $rows; $i++)
{
    if(sqlsrv_fetch($results) !== false)
    {
      $startdate = date_format(sqlsrv_get_field($results, 0), "Y-m-d"); //line 72
      $stopdate = date_format(sqlsrv_get_field($results, 1), "Y-m-d");  //line 73
    }
}

我的php-errors.log文件中出现以下错误:

[13-Nov-2014 17:05:19 UTC] PHP警告:date_create():依赖系统的时区设置是不安全的。您必需使用date.timezone设置或date_default_timezone_set()函数。如果您使用了这些方法中的任何一种并且仍然收到此警告,则很可能拼错了时区标识符。我们选择了美国/芝加哥&#39;对于&#39; -6.0 /没有DST&#39;而是在第72行的E:\ inetpub \ wwwroot \ directory \ searchtest.php

[13-Nov-2014 17:05:19 UTC] PHP警告:date_create():依赖系统的时区设置是不安全的。您必需使用date.timezone设置或date_default_timezone_set()函数。如果您使用了这些方法中的任何一种并且仍然收到此警告,则很可能拼错了时区标识符。我们选择了美国/芝加哥&#39;对于&#39; -6.0 /没有DST&#39;而是在第73行的E:\ inetpub \ wwwroot \ directory \ searchtest.php

当我执行此操作时,创建$startdate$stopdate作为DateTime对象会产生相同的错误:

$timezone = new DateTimeZone("America/Chicago");
$startdate = new DateTime("2012-12-12", $timezone);
$stopdate = new DateTime("2012-12-12", $timezone);

// get $results and find $rows and junk

$startdate = sqlsrv_get_field($results, 0);
$stopdate = sqlsrv_get_field($results, 1);
无论如何应该起作用,因为你们曾帮助我解决以前的问题。

所以我的问题是:为什么这会因500错误而失败,我该怎么做才能纠正它?

1 个答案:

答案 0 :(得分:1)

将我的评论转换为答案:

尝试在脚本开头添加date_default_timezone_set('America/Chicago');