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;
}
}
このコンピュータがアイドル状態になった場合を除き、すべてが正常に正常に動作します数時間。
DB設定の問題のようです。これをチェックしてください:http://dba.stackexchange.com/questions/29992/odbc-data-source-sql-server-connection-login-failed-for-user – MonkeyZeus
@MonkeyZeusしかし、最初のロード時には正常に動作します。リフレッシュ。コンピュータがアイドル状態のままになると失敗します。 – Cameron
"修正"し、コンピュータ/サーバー/ DBを再起動しましたが、引き続き問題が発生しましたか? – MonkeyZeus