繁体   English   中英

pg_prepare创建角色的问题?

[英]pg_prepare problems with Create role?

您好,我想用准备好的声明创建一个新的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");

一切都按预期工作。

有人提示吗? 谢谢

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

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

我认为你需要pg_escape_identifier()来避免对这样的动态项进行SQL注入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM