更改用户&;通过带有PostgreSQL数据库的PhP表单出现密码问题

更改用户&;通过带有PostgreSQL数据库的PhP表单出现密码问题,php,postgresql,forms,rename,alter,Php,Postgresql,Forms,Rename,Alter,我需要创建一个表单来直接修改pg_shadow表的usename和passwd 只能通过以下查询来修改: 将用户oldLogin重命名为newLogin; 使用加密密码newPassword更改用户newLogin; 话虽如此,我编写了一个User.class.php,其中包含: 用户(private$\u userID;private$\u login;private$\u password;) 然后在UserManager.class.php中,我编写了一个: 公共静态函数更新(用户$pe

我需要创建一个表单来直接修改pg_shadow表的usename和passwd

只能通过以下查询来修改:

将用户oldLogin重命名为newLogin;
使用加密密码newPassword更改用户newLogin;
话虽如此,我编写了一个User.class.php,其中包含: 用户(private$\u userID;private$\u login;private$\u password;)

然后在UserManager.class.php中,我编写了一个: 公共静态函数更新(用户$person)。 一旦选择了新的标识符,单击“修改”时,显然会执行此功能

以下是我的功能更新:

公共静态函数更新(用户$person)
{
$db=DbConnect::getDb();
$q0=$db->prepare('从pg_shadow u选择usename作为登录名,其中usesysid=:idUser;');
$q0->bindValue(':idUser',$person->getIdUser());
$res0=$q0->execute();//查询以获取旧的usename,这要感谢id。
$old=$q0->fetch(PDO::fetch_ASSOC);
$q1=$db->prepare(“将用户:oldLogin重命名为:login;”);
$q2=$db->prepare(“ALTER USER:login WITH ENCRYPTED PASSWORD:PASSWORD;”);
$q1->bindValue(':oldLogin',$old['login']);
$q1->bindValue(':login',$person->getLogin());
$q2->bindValue(':login',$person->getLogin());
$q2->bindValue(':password',$person->getPassword());
$res1=$q1->execute();
$res2=$q2->execute();
}
显然,它不起作用。。。 你能帮帮我吗

我试着替换
$q1
,只是为了一个简单的测试:

$q1 = $db->prepare("ALTER USER 'user1' RENAME TO 'newUser1';");
//It didn't work

$q1 = $db->prepare("ALTER USER user1 RENAME TO 'newUser1';");
//It didn't work

$q1 = $db->prepare("ALTER USER 'user1' RENAME TO newUser1;");
//It didn't work

$q1 = $db->prepare("ALTER USER user1 RENAME TO newUser1;");
//It work

您的问题是,您正试图为
alteruser
使用一个准备好的语句。那不行

您必须构造包含参数值的查询字符串。使用该函数可以避免SQL注入

只有最后一个不带参数的语句才有效,因为用户名是标识符而不是字符串文字,所以它们应该不加引号或用双引号引起来。

好的

好吧,我找到了让它工作的方法,谢谢你们

以下是我所做的修改:

公共静态函数更新(用户$newPerson)
{
$db=DbConnect::getDb();
$idUser=$newPerson->getIdUser();
$oldPerson=self::getById($idUser);
$oldLogin=pg_escape_字符串($oldPerson->getLogin());
$newLogin=pg_escape_字符串($newPerson->getLogin());
$newPassword=pg_escape_字符串($newPerson->getPassword());
$sql=“将用户{$oldLogin}重命名为{$newLogin};使用加密密码{$newPassword}更改用户{$newLogin};”;
pg_查询($sql);
}

查询中有输入错误(使用用户名而不是用户名)<代码>从pg_shadow u选择用户名作为登录名,其中usesysid=:idUser这是故意的还是可能是问题所在?是的,这是故意的,正如你所看到的:哦。我懂了。那么,当这个方法被触发时,你会得到什么错误?@Etin:看看我的新帖子……那好多了!如果你比我更喜欢这个答案,你可以接受。