我正试图用PHP到达我的新PGSQL数据库。问题是,我收到标题中给出的错误。当我尝试直接连接。它工作,当我尝试通过PDO连接时,它给出这个错误。
我检查了什么:
- . 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的部分)可以。有点奇怪,对吧?
谁能帮我这个忙?无效的数据源名称
错误信息非常清楚。控件中使用的数据源名称是DSN字符串PDO构造函数。它似乎是无效的。
因此,不需要检查php.ini, php_pgsql.dll或password -所有这些错误都有不同的错误消息需要处理。
所以,你所需要做的就是修正你的DSN字符串。打印出当前的DSN,并将其与规范的DSN进行比较,直接从手册页中获取。例如,对于pgsql,正确的DSN格式应该是
pgsql:host=localhost;port=5432;dbname=testdb;user=bruce;password=mypass
而对于所有其他驱动程序,可以在手册