未捕获的异常' PDOException'在MS Server PHP

时间:2016-06-14 13:33:02

标签: php sql-server oauth-2.0 file-get-contents

嗨我得到以下错误,在发布帖子请求时我使用的是MS服务器,MSSQL数据库和php for Oauth2解决方案。

  

致命错误:未捕获的异常' PDOException' with message' SQLSTATE [22007]:[Microsoft] [用于SQL Server的ODBC驱动程序11] [SQL Server]将nvarchar数据类型转换为日期时间数据类型会导致超出范围的值。&# 39;在C:\ xampp \ htdocs \ api \ OAuth2 \ Storage \ Pdo.php:156堆栈跟踪:#0 C:\ xampp \ htdocs \ api \ OAuth2 \ Storage \ Pdo.php(156):PDOStatement-> execute(数组)#1 C:\ xampp \ htdocs \ api \ OAuth2 \ ResponseType \ AccessToken.php(84):OAuth2 \ Storage \ Pdo-> setAccessToken(' 02742b6cd16424e ...',&#39 ; testclient',NULL,1465910857,NULL)#2 C:\ xampp \ htdocs \ api \ OAuth2 \ GrantType \ ClientCredentials.php(58):OAuth2 \ ResponseType \ AccessToken-> createAccessToken(' testclient&# 39;,NULL,NULL,false)#3 C:\ xampp \ htdocs \ api \ OAuth2 \ Controller \ TokenController.php(205):OAuth2 \ GrantType \ ClientCredentials-> createAccessToken(Object(OAuth2 \ ResponseType \ AccessToken), ' testclient',NULL,NULL)#4 C:\ xampp \ htdocs \ api \ OAuth2 \ Controller \ TokenController.php(49):OAuth2 \ Controller \ TokenController-> grantAccessToken(Object(OAuth2 \ Request) ),对象(第156行的C:\ xampp \ htdocs \ api \ OAuth2 \ Storage \ Pdo.php中的OAuth2 \ Response

在做了一些研究之后我明白22007与日期问题有关,我已经改变了日期的格式。

这是服务器抱怨的Pdo.php中的代码块

public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)
{
    //convert expires to datestring
    //$expires = date('Y-m-d H:i:s', $expires);
    $expires = date("Ymd H:i:s", $expires);
    //echo $expires . "-------------------";

    // if it exists, update it.
    if ($this->getAccessToken($access_token)) {
        $stmt = $this->db->prepare(sprintf('UPDATE %s SET client_id=:client_id, expires=:expires, user_id=:user_id, scope=:scope where access_token=:access_token', $this->config['access_token_table']));
    } else {
        $stmt = $this->db->prepare(sprintf('INSERT INTO %s (access_token, client_id, expires, user_id, scope) VALUES (:access_token, :client_id, :expires, :user_id, :scope)', $this->config['access_token_table']));
    }

    return $stmt->execute(compact('access_token', 'client_id', 'user_id', 'expires', 'scope'));
}

奇怪的是,当我运行卷曲帖子时终端和邮递员,当我在token.php上运行请求时,我得到了正确的响应。

我们服务器上的php_curl.dll存在问题,这意味着我必须使用file_get_contents发布请求来获取数据。

public function getAccess() {
    $postdata = http_build_query ( array (
            'client_id' => 'testclient',
            'client_secret' => 'testpass',
            'grant_type' => 'client_credentials' 
    )
     );

    $opts = array (
            'http' => array (
                    'method' => 'POST',
                    'header' => 'Content-type: application/x-www-form-urlencoded',
                    'content' => $postdata 
            ) 
    );

    $context = stream_context_create ( $opts );

    $result = file_get_contents ( 'http://IPADDRESS/api/token.php', false, $context );
    // var_dump($result);
    echo $result;
    return $result;
}

我猜这个问题与使用file_get_contents有关,因为访问令牌是从终端和邮递员创建的。

任何建议都将不胜感激。

谢谢。

0 个答案:

没有答案