2016-04-04 13 views
1

SQL ServerとPDOを使用してWindows上でローカルにを実行する単純なPHPアプリケーションをWindowsマシン上で実行しています。 、私は、ページを更新するとPHP PDOログインが長期間アクティブでない場合に失敗する

[04-Apr-2016 13:57:33 Europe/Dublin] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Login failed for user 'username'.' in C:\Application\web\api\helpers\DB.php:21 Stack trace: #0 C:\Application\web\api\helpers\DB.php(21): PDO->__construct('sqlsrv:server=L...', 'username', 'password') #1 C:\Application\web\api\helpers\DB.php(14): DB->__construct() #2 C:\Application\web\api\controllers\App.php(309): DB::getInstance() #3 C:\Application\web\api\index.php(49): App::ListAppWithMedia() #4 {main} thrown in C:\Application\web\api\helpers\DB.php on line 21

:私は見つけることだ何

は、コンピュータを長時間放置し、その後、私はアプリケーションにアクセスした場合、私は時々、次のエラーを取得するということですそれはうまく動作します!エラーの様子から、それはDBに接続できないかのようです...これを引き起こす可能性のあるアイデアはありますか?私はIISがアイドル状態になり、リソースを節約するために再起動できることを知っていますが、なぜそれがSQL Server上で失敗するのでしょうか?リフレッシュして自分自身を修正しますか? db.phpの

内容は以下のとおりです。

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; 
    } 

} 

そして、ここでは、このクラスを使用する方法の例です:

class App 
{ 
    public static function ListAppWithMedia() 
    { 
     $sql = "SELECT * FROM Applications"; 

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

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

     return $rows; 
    } 
} 

このコンピュータがアイドル状態になった場合を除き、すべてが正常に正常に動作します数時間。

+0

DB設定の問題のようです。これをチェックしてください:http://dba.stackexchange.com/questions/29992/odbc-data-source-sql-server-connection-login-failed-for-user – MonkeyZeus

+0

@MonkeyZeusしかし、最初のロード時には正常に動作します。リフレッシュ。コンピュータがアイドル状態のままになると失敗します。 – Cameron

+0

"修正"し、コンピュータ/サーバー/ DBを再起動しましたが、引き続き問題が発生しましたか? – MonkeyZeus

答えて

1
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(); 
    } 

    ?> 
関連する問題