[英]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");
一切都按预期工作。
有人提示吗? 谢谢
您不能为此目的使用准备好的声明。 预准备语句的参数只能引用数据值(例如在INSERT
或UPDATE
语句中,或在您提供的WHERE
示例中)。 CREATE ROLE
语句中的角色名称和密码的值需要作为字符串文字提供。
在CREATE ROLE
使用CREATE ROLE
准备语句也没有用处。 准备好的语句用于计划复杂语句的执行一次,然后使用不同的参数执行多次。 CREATE ROLE
语句并不复杂,如果可以开始使用,也不会在单个会话中运行足够的语句以使预准备语句有用。
我认为你需要pg_escape_identifier()来避免对这样的动态项进行SQL注入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.