我使用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的内容如下:
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;
}
}这一切正常工作,除非电脑闲置几个小时。
发布于 2016-04-04 13:42:09
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();
}
?>https://stackoverflow.com/questions/36403845
复制相似问题