1

SO、PHPを使用してPostgreSQLテーブルにいくつかのレジスタを挿入しようとしています。

テーブルがcareerあり、レジスタは school_careers.sql に登録されています。だから私はこれを試しました:

$host = "localhost";
$user = "user";
$pass = "passw0";
$db = "school";

$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
       or die ("Could not connect to server $server\n");

$query = "\\i ./school_classes.sql";
$rs = pg_query($con, $query) or die("Cannot execute query: $query\n");

echo $rs . " done\n";

pg_close($con);

しかし、私はただ得ます:

Cannot execute query: \i ./school_classes.sql

4

2 に答える 2

1

"\i" は psql クライアント プログラム コマンドであり、有効なクエリではないため、これは機能しません。このコマンドをそのまま PHP で pg_query として機能させる方法はありません。このようにしたい場合は、シェルを呼び出して次のコマンドを実行できます。

psql -c "\i ./school_classes.sql" -U <username> -h <hostname> <dbname>

これには、単純にパスワードを psql クライアントに渡すことができるとは思えないという欠点があります。パスワードの入力を求めるプロンプトが表示されます。ユーザー名とパスワードのペアを含む.pgpassファイルを設定すると、プロンプトを表示せずに接続するために使用できます (これは、PostgreSQL のドキュメントで「libpq-pgpass」として詳しく説明されています)。

また、私は PHP の人ではないので、シェル コマンドの実行方法はわかりませんが、ドキュメントに記載する必要がある一般的な操作です。また、スクリプトが正しく実行できることを検証するために、シェル コマンドからの出力をキャプチャする方法を決定する必要もあります。

于 2012-05-30T16:44:30.413 に答える
1

pg_queryファイル名ではなく、リテラル クエリが必要なため、エラーが発生します。

この投稿では、PHP でファイルから SQL をロードして実行する方法について説明します: PHP内から .​​sql ファイルをロードする

Jeremy Privettによって受け入れられた回答では、「クエリを実行できる変数にクエリを含む PHP ファイルを作成する」ことを推奨しているようです。

于 2012-05-28T23:31:46.973 に答える