无法建立数据库连接;无效的数据源名称(仅带有PDO)


Database connection could not be established; Invalid data source name (Only with PDO)

我正试图用PHP到达我的新PGSQL数据库。问题是,我收到标题中给出的错误。当我尝试直接连接。它工作,当我尝试通过PDO连接时,它给出这个错误。

我检查了什么:

  • . ini。所需的扩展不加注释(php_pgsql.dllphp_pdo_pgsql.dll)
  • 确保这两个文件确实在PHP文件夹中。
  • 使用简单的脚本(如下所示)确保数据库,主机,用户,通行证和端口是正确的

    这是我设置数据库的配置文件(我正确使用6个数据库)。所以我知道错误不在那个文件)

    "Aeges":{
        "pdo_driver":"odbc",
        "user":"XXXX",
        "password":"XXXX",
        "database":"test",
        "host":"localhost",
        "port":1233
    },
    "Postgre":{
        "pdo_driver":"pgsql",
        "user":"XXXX",
        "password":"XXXX",
        "database":"ASN",
        "host":"localhost",
        "port":5432
    }
    etc..
    

这是我检索信息的函数。我稍微清理了一下,使它更清晰

public static function findAvailableASN()
{
    $Postgre = db'Factory::getInstance()->create('Postgre');
    $stmt = $Postgre->prepare("select * from asnregel.asnregel");
    if ($stmt->execute()) 
    {
        return $stmt->fetchAll('PDO::FETCH_ASSOC);
    }
/*  $connect = pg_connect("host=localhost port=5432 dbname=ASN user=XXXX password=XXXX");
    if(!$connect) {
        die("Error in connection: ".pg_last_error());
    }
    $sql = "select * from asnregel.asnregel";
    $result = pg_query($connect,$sql);
    if(!$result) {
        die("Error in sql query: ".pg_last_error());
    }
    while($row = pg_fetch_array($result)) {
        echo $row[0].'<br/>';
        echo $row[1].'<br/>';
        echo $row[2].'<br/>';
        echo $row[3].'<br/>';
    }
    pg_free_result($result);
    pg_close($connect); */
}

所以问题是第一部分不起作用(带有PDO的部分)。而注释的部分(没有PDO的部分)可以。有点奇怪,对吧?

谁能帮我这个忙?

无效的数据源名称

错误信息非常清楚。控件中使用的数据源名称是DSN字符串PDO构造函数。它似乎是无效的。

因此,不需要检查php.ini, php_pgsql.dll或password -所有这些错误都有不同的错误消息需要处理。
所以,你所需要做的就是修正你的DSN字符串。打印出当前的DSN,并将其与规范的DSN进行比较,直接从手册页中获取。例如,对于pgsql,正确的DSN格式应该是

pgsql:host=localhost;port=5432;dbname=testdb;user=bruce;password=mypass

而对于所有其他驱动程序,可以在手册

中找到正确的格式