1

PHP で新しい PGSQL データベースにアクセスしようとしています。問題は、タイトルに記載されているエラーが表示されることです。直接接続しようとすると。PDOで接続しようとすると、このエラーが発生します。

私がチェックしたもの:

  • PHP.ini. 必要な拡張子はコメント解除されています ( php_pgsql.dllphp_pdo_pgsql.dllの両方) 。
  • これら 2 つのファイルが実際に 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 に答える