Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 向pgSQL表添加权限时出现问题_Php_Sql_Postgresql_Pdo - Fatal编程技术网

Php 向pgSQL表添加权限时出现问题

Php 向pgSQL表添加权限时出现问题,php,sql,postgresql,pdo,Php,Sql,Postgresql,Pdo,根据我在“示例”部分所读的内容,我认为下面的代码应该允许我修改我的表,以便所有当前和未来的表都可以读/写 $sql = "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;"; $sth = $pdo->prepare($sql); $sth->execute(); // <-- LINE 14 $sql1 = "ALTER DEFAULT PRIVILEGES IN SCHEM

根据我在“示例”部分所读的内容,我认为下面的代码应该允许我修改我的表,以便所有当前和未来的表都可以读/写

$sql = "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;";
$sth = $pdo->prepare($sql);
$sth->execute(); // <-- LINE 14
$sql1 = "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALTER ON TABLES TO PUBLIC;";
$sth1 = $pdo->prepare($sql1);
$sth1->execute();
$sql=“将模式公共中的默认权限更改为将表上的选择授予公共;”;
$sth=$pdo->prepare($sql);
$sth->execute();//准备($sql1);
$sth1->execute();
但我得到了一个错误:

致命错误:未捕获的异常“PDOException”带有消息 'SQLSTATE[42601]:语法错误:7错误:位于或接近的语法错误 “默认”第1行:更改模式公共授权中的默认权限 在TA上选择…^'在里面第14行



我哪里出错了?

很可能是在太旧的PostgreSQL上运行查询。ALTER DEFAULT PRIVILEGES是在9.0中添加的。

很可能是在太旧的PostgreSQL上运行查询。ALTER DEFAULT PRIVITES是在9.0中添加的。

如果您使用的是模拟的prepares,请尝试在不准备语句的情况下执行该语句,在删除该语句时使用
$pdo->exec($sql)
@Denis,我会得到
致命错误:对非对象调用成员函数execute()
$thomas:not
$stmt->execute()
<代码>$pdo->exec():(我认为depesz的答案是正确的。我只是想知道这可能是pdo的模拟prepare解析器中的一个bug或者类似的东西。)@Denis是的,对不起……误读了。当我第一次尝试
$pdo->exec($sql)时,我得到了与第一次相同的错误。谢谢。请始终在问题中包括您的PostgreSQL版本(
SELECT version()
)。如果您使用的是模拟的prepares,请尝试在不准备语句的情况下执行该语句,在我删除该语句时使用
$pdo->exec($sql)
@Denis,我会得到
致命错误:调用成员函数execute()在非对象上
$thomas:not
$stmt->execute()
<代码>$pdo->exec()
:(我认为depesz的答案是正确的。我只是想知道这可能是pdo的模拟prepare解析器中的一个bug或者类似的东西。)@Denis是的,对不起……误读了。当我第一次尝试
$pdo->exec($sql)时,我得到了与第一次相同的错误。谢谢。请在问题中始终包含您的PostgreSQL版本(
SELECT version()
),谢谢。似乎我正在运行
PostgreSQL 8.4.13
。看起来我们刚刚升级了。8.4已经很老了——4年了。9.0已经快3年了。我的服务器人员告诉我8.4是cPanel支持的最高版本。我想这意味着如果我安装了更高的版本,我将无法继续使用phpPgAdmin..您可以自己安装phpPgAdmin。如果某些软件(cPanel)不允许您使用更新版本的数据库,那么停止使用此软件(cPanel,而不是Pg)是完全合理的理由。谢谢。似乎我正在运行
PostgreSQL 8.4.13
。看起来我们刚刚升级了。8.4已经很老了——4年了。9.0已经快3年了。我的服务器人员告诉我8.4是cPanel支持的最高版本。我想这意味着如果我安装了更高的版本,我将无法继续使用phpPgAdmin..您可以自己安装phpPgAdmin。如果某些软件(cPanel)不允许您使用更新版本的数据库,那么停止使用该软件(cPanel,而不是Pg)是完全合理的理由。