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

时间:2013-04-09 07:33:21

标签: php sql postgresql pdo

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

我检查了什么:

  • PHP.ini中。取消注释所需的扩展名( php_pgsql.dll php_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的部分)确实如此。有点奇怪吗?

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

  

无效的数据源名称

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

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

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

对于所有pther驱动程序,可以在manual

中找到正确的格式