我有时收到以下错误:
SQLSTATE [HY000] [14]无法打开数据库文件
我使用
打开日期库new PDO("sqlite:database/datbase.db","","",array(
PDO::ATTR_PERSISTENT => true
));
每次我想要从数据库读取数据或向数据库写入数据。开放过程是以下功能:
function opendatabase(){
try{
return new PDO("sqlite:database/database.db","","",array(
PDO::ATTR_PERSISTENT => true
));
}catch(PDOException $e){
logerror($e->getMessage(), "opendatabase");
print "Error in openhrsedb ".$e->getMessage();
}
}
经过一段时间(某个时间超过一个小时,有些时间过了几分钟后,我会在帖子开头收到错误消息。如何防止此类错误?
答案 0 :(得分:3)
如果有人在重用PDO连接时遇到相同的消息但仍有问题,可能是因为你正在存储从fopen()获得的图像而忘记了fclose()语句。在这种特殊情况下,错误消息确实具有误导性。 以下是我在故障排除几天后设法解决的相同错误消息的问题。 SQLSTATE[HY000] [14] : can't open database because too many connections are already opened
答案 1 :(得分:2)
这是来自SQLlite的错误:
#define SQLITE_CANTOPEN 14 /* Unable to open the database file */
您似乎已经打开了许多连接,我建议您重新连接,如果它已打开。
创建一个属性:
private $pdo;
在创建新对象之前检查它是否为null:
function opendatabase(){
try{
if($this->pdo==null){
$this->pdo =new PDO("sqlite:database/database.db","","",array(
PDO::ATTR_PERSISTENT => true
));
}
return $this->pdo;
}catch(PDOException $e){
logerror($e->getMessage(), "opendatabase");
print "Error in openhrsedb ".$e->getMessage();
}
}
答案 2 :(得分:0)
非常奇怪,但对我来说,这是因为没有将新的PDO语句包装在try / catch块中。