1

我正在尝试使用 PHP 访问我的新 PGSQL 数据库。问题是我收到标题中给出的错误。当我尝试直接连接时。它有效,当我尝试通过 PDO 连接时,它会出现此错误。

我检查了什么:

  • PHP.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的部分)确实如此。有点奇怪吧?

谁能帮我解决这个问题?

4

1 回答 1

2

数据源名称无效

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

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

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

而对于所有 pther 驱动程序,正确的格式可以在手册中找到

于 2013-04-09T09:16:07.340 回答