pg_prepare创建角色的问题?

时间:2015-07-16 07:58:59

标签: php postgresql

您好我想用一个准备好的语句创建一个新的postgresql角色: 我的代码:

$stmt = pg_prepare($conn,"test","CREATE ROLE $1 WITH LOGIN PASSWORD $2 NOCREATEDB NOCREATEROLE");
    $result = pg_execute($conn,"test",array($username,$password));
    if (!$result){
        die("error in SQL query:".pg_last_error());
    }

但是我在执行时遇到了这个错误: PHP警告:pg_prepare():查询失败:FEHLER:Syntaxfehler bei»$ 1«

如果我尝试一个简单的选择:

$stmt = pg_prepare($conn,"test","Select * from pg_user where usename=$1");

一切都按预期工作。

任何人都有提示吗? 感谢

1 个答案:

答案 0 :(得分:2)

您不能为此目的使用准备好的声明。预准备语句的参数只能引用数据值(例如INSERTUPDATE语句或您提供的WHERE示例中的数据值。 CREATE ROLE语句中的角色名称和密码值需要以字符串文字形式提供。

CREATE ROLE中使用准备好的陈述根本没用。准备好的语句用于计划复杂语句的执行一次,然后使用不同的参数执行多次。 CREATE ROLE语句并不复杂,如果可以开始使用,也不会在单个会话中运行足够的语句来使预准备语句有用。