Php 无法在PDO中建立PG连接

Php 无法在PDO中建立PG连接,php,postgresql,pdo,Php,Postgresql,Pdo,我无法连接到我的数据库。当然,我只是缺少一些简单的东西: $host = "localhost"; $port = "5432"; $db_name = 'db'; $username = "user"; $password = "pass"; $dbh = new PDO("pgsql:dbname=$db_name; host=$host", $username, $password ); $dbh->setAttribute( PDO::ATTR_ERRMODE , PDO::ER

我无法连接到我的数据库。当然,我只是缺少一些简单的东西:

$host = "localhost";
$port = "5432";
$db_name = 'db';
$username = "user";
$password = "pass";
$dbh = new PDO("pgsql:dbname=$db_name; host=$host", $username, $password );

$dbh->setAttribute( PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION );

$sth = $dbh->prepare("
    SELECT *
    FROM   test1
    WHERE  id = :id
    ");

$sth->bindValue(':id', 1, PDO::PARAM_STR);
$sth->execute();

$result = $sth->fetchAll(PDO::FETCH_ASSOC);
var_dump($result);
我得到了错误

致命错误:未捕获的异常“PDOException”带有消息 'SQLSTATE[42P01]:未定义的表:7错误:关系test1不存在 存在第3行:来自[url]中的test1^'。。。地址堆栈跟踪:0…[url]。。。PDOStatement->执行抛出的1{main}…[url]

谢谢

尝试使用以下DSN格式:pgsql:host=localhost;端口=5432;dbname=db;用户=用户;密码=通过。 检查您的用户是否具有访问模式、数据库和该表所需的postgresql所有权限。将表test1上的select授予用户应该使您能够访问该表。 也许可以试试这个:

$host = 'localhost';
$port = '5432';
$db_name = 'db';
$username = 'user';
$password = 'pass';

$dbh = new PDO('pgsql:port=' . $port . ';host=' . $host . ';dbname=' . $db_name . ';charset=utf8', '' . $username . '', '' . $password . '');

表test1存在吗?阅读错误消息,如果它能告诉您表不存在,您的连接就很好了。@tadman是的,它存在。@adear11是的,但我可以在phpPgAdminAre中看到它。您确定您的表名是db吗?很遗憾,这不起作用。删除此行dbh->setAttribute PDO::ATTR_ERRMODE,PDO::ERRMODE_异常;阻止了我的错误。然而,我现在从我的var_dump$结果中得到这个回响数组0{};感谢您的帮助更改错误模式不会有任何帮助。你所做的只是把手指塞进耳朵里,然后开始换拉拉。解决问题,停止射击messenger。@MarcB,别紧张。我不知道这会阻止我看到所有的错误。我只是注意到,由于缺少那条特定的线,因此不再报告该特定的错误。我认为这可能有助于确定错误的确切原因。同样,您可以发布有问题的表的创建表吗?删除并替换该表。确保用户已在数据库和表上设置了所有权限。您的DSN格式没有问题