首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >长期不活动时PDO登录失败

长期不活动时PDO登录失败
EN

Stack Overflow用户
提问于 2016-04-04 13:20:11
回答 1查看 208关注 0票数 1

我使用Server和PDO在IIS上运行了一个简单的PHP应用程序,我在Windows8.1的Windows机器上本地运行。

我所发现的是,如果计算机保存了很长一段时间,然后我访问了应用程序,我有时会收到以下错误:

04-2016年4月13日:57:33欧洲/都柏林PHP致命错误:未命名的异常'PDOException‘,并带有消息'SQLSTATE28000: MicrosoftSQL ServerLogin失败的用户’用户名‘。在C:\Application\web\api\helpers\DB.php:21堆栈跟踪中:#0 C:\Application\web\api\helpers\DB.php(21):PDO->_C:\Application\web\api\helpers\DB.php(‘sqlsrv:server=L.’,'username',‘C:\Application\web\api\controllers\App.php(309):’) #1 C:\Application\web\api\helpers\DB.php(14):DB->_ C:\Application\web\api\helpers\DB.php () #2 C:\Application\web\api\index.php DB::getInstance() #3 C:\Application\web\api\index.php(49):App:ListAppWithMedia() #4 {main}抛入第21行的C:\Application\web\api\helpers\DB.php

如果我再刷新页面,它就能正常工作!从错误的外观看,好像它无法连接到DB.有什么能导致这件事的想法吗?我知道IIS可以空闲并重新启动以节省资源,但是为什么它会在Server上失败呢?然后在刷新时修复自己?

DB.php的内容如下:

代码语言:javascript
复制
class DB
{
    private $connection;

    private static $instance = NULL;

    public static function getInstance()
    {
        if (self::$instance === NULL)
            self::$instance = new self();

        return static::$instance;
    }

    private function __construct()
    {
        $this->connection = new PDO("sqlsrv:server=".SERVER.";Database=".DATABASE, UID, PWD);
    }

    public function query($query, $params = null)
    {
        $q = $this->connection->prepare($query);

        $execute = $q->execute($params);

        return $q;
    }

}

下面是一个如何使用这个类的例子:

代码语言:javascript
复制
class App
{
    public static function ListAppWithMedia()
    {
        $sql = "SELECT * FROM Applications";

        $query = DB::getInstance()->query($sql);

        $rows = $query->fetchAll(PDO::FETCH_ASSOC);

        return $rows;
    }
}

这一切正常工作,除非电脑闲置几个小时。

EN

回答 1

Stack Overflow用户

发布于 2016-04-04 13:42:09

代码语言:javascript
复制
Create a PDO instance and set the error mode    
<?php
    $dsn = 'mysql:dbname=test;host=localhost';
    $user = 'user';
    $password = 'pass';

    try {
        $dbh = new PDO($dsn, $user, $password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }

    ?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36403845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档