2016-04-04 14 views
1

SQL Server ve PDO kullanarak IIS üzerinde çalışan ve Windows 8.1 ile bir Windows makinesinde yerel olarak çalıştıran basit bir PHP uygulamasına sahibim. Ben sonra sayfayı yenileyin EğerPHP PDO Giriş uzun süre aktif değilken başarısız oluyor

[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

:

Ne buluyorum bilgisayar uzun bir süre bırakılır ve sonra uygulamaya erişmek, ben bazen aşağıdaki hatayı alıyorum olmasıdır iyi çalışıyor! Hatanın görünüşünden, DB'ye bağlanamayacakmış gibi ... Buna neyin sebep olacağı konusunda bir fikrin var mı? IIS'nin kaynakları boşa harcayabileceğini ve kaynakları kurtarmak için yeniden başlatabileceğini biliyorum, ancak neden SQL Server'da başarısız olur? Ve sonra kendini bir yenilemede düzeltin?

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

} 

Ve burada bu sınıf nasıl kullanıldığına ilişkin bir örnek:: DB.php ait

içeriği olan bilgisayar boşta bırakılır sürece bu tüm normalde çalışıyor

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

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

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

     return $rows; 
    } 
} 

birkaç saat.

+0

Bir DB yapılandırma sorunu gibi görünüyor. Şuna bir bakın: http://dba.stackexchange.com/questions/29992/odbc-data-source-sql-server-connection-login-failed-for-user – MonkeyZeus

+0

@MonkeyZeus Ancak giriş ilk yüklemede ve yeniler. Sadece bilgisayar boşta kalırsa başarısız olur. – Cameron

+0

Bu "düzeltmeyi" denediniz mi, bilgisayarınızı/sunucunuzu/DB'nizi yeniden başlattınız ve sorunu yaşamaya devam edersiniz? – MonkeyZeus

cevap

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

    ?>