1

所以,我正在尝试使用 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

您收到错误是因为pg_query需要文字查询,而不是文件名。

这篇文章讨论了从 PHP 中的文件加载和运行 sql:Loading .sql files from inside PHP

Jeremy Privett接受的答案似乎建议您“构建一个 PHP 文件,该文件包含一个变量中的查询 [您] 可以从中运行它们”。

于 2012-05-28T23:31:46.973 回答
1

这不起作用,因为“\i”是一个 psql 客户端程序命令,不是一个有效的查询。该命令无法按原样在 PHP 中作为 pg_query 工作。如果你想这样做,你可以调用一个 shell 并运行这个命令:

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

这有一个缺点,我不相信您可以简单地将密码传递给 psql 客户端,它会提示输入密码。您可以设置一个包含用户名/密码对的.pgpass文件,然后它可以使用它来连接而无需提示(这在 PostgreSQL 文档中详细说明为“libpq-pgpass”)。

另外,我不是 PHP 人,所以我不知道如何运行 shell 命令,但这是一个足够常见的操作,它应该在文档中。您还需要确定如何捕获 shell 命令的输出,以验证您的脚本是否正确。

于 2012-05-30T16:44:30.413 回答