使用 PDO 连接在运行时无法第二次打开数据库



在Ubuntu 22.4.1服务器上,我安装了Firebird 3.0.8、Apache 2.4和php 8.1.11(带有php8.1-interbase(。当我使用以下脚本通过WEB访问数据库时:

<?php
$utente = 'MyName';
$password = 'MyPW';
$database = 'firebird:host=localhost;dbname=/path/to/MYDB.FDB';
$connessione = new PDO($database, $utente, $password);
$query = "SELECT...";
$comando = $connessione->prepare($query);
$comando->execute();
$conta = 0;
while ($riga[$conta] = $comando->fetch(PDO::FETCH_ASSOC)) {$conta++;}
for ($i = 0; $i < $conta; $i++) {
echo "$riga[$i]["COLUMN_NAME"]";
}
$comando = null;
$connessione = null;
?>

一切顺利。但是,如果在执行该脚本期间,我通过另一个WEB连接或直接访问数据库,使用FlameRobin,我会收到以下错误消息:

在";锁定";文件操作"/路径/到/MYDB。FDB";数据库已使用引擎实例打开,与不兼容当前

在使用PDO之前,我使用php7.2 直接访问数据库

$connessione = ibase_connect($database, $utente, $password);
$query = "SELECT...";
$comando = ibase_query($connessione, $query);
$conta = 0;
while ($riga[$conta] = ibase_fetch_assoc($comando)) {$conta++;}
...

我没有遇到任何问题。剧本里出了什么问题?谢谢

此错误通常意味着一个(或多个(连接尝试使用Firebird Embedded连接进行连接。使用Firebird Embedded,数据库引擎作为库加载到客户端进程的地址空间,直接打开数据库文件,而不是通过TCP/IP端口连接到Firebird服务器进程。Firebird(SuperServer(的默认模式不允许多个引擎打开数据库(尽管出现此错误可能还有其他原因,例如由于文件访问权限错误而无法打开某些共享锁定文件等(。

根据PDO Firebird文档,PDO Firebird的连接URL没有连接属性host。这意味着你实际上只使用文件名进行连接,这会导致使用Firebird Embedded模式(如果fbclient可以访问插件/engineXX库(。

相反,您应该将主机名放在dbname条目中:

firebird:dbname=hostname:/path/to/DATABASE.FDB

或者如果您还想指定端口:

firebird:dbname=hostname/port:/path/to/DATABASE.FDB

因此,在您的具体情况下,请使用

firebird:dbname=localhost:/path/to/MYDB.FDB

相关内容

最新更新