【发布时间】:2019-12-31 10:57:08
【问题描述】:
我需要创建一个表单来直接修改pg_shadow表的usename和passwd。
只能通过以下查询进行修改:
ALTER USER oldLogin RENAME TO newLogin;
ALTER USER newLogin WITH ENCRYPTED PASSWORD newPassword;
话虽如此,我写了一个 User.class.php : 用户(私人 $_userID;私人 $_login;私人 $_password;)
然后在 UserManager.class.php 我写了一个: 公共静态函数更新(用户 $person)。 一旦选择了新的标识符,当单击“修改”时显然会执行此功能。
这是我的函数更新:
public static function update(User $person)
{
$db = DbConnect::getDb();
$q0=$db->prepare('SELECT usename as login FROM pg_shadow u WHERE usesysid = :idUser;');
$q0->bindValue ( ':idUser', $person->getIdUser());
$res0= $q0->execute(); //Query to get the old usename thanks to the id.
$old = $q0->fetch(PDO::FETCH_ASSOC);
$q1 = $db->prepare("ALTER USER :oldLogin RENAME TO :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
【问题讨论】:
-
您在查询中有错字(用户名而不是用户名)。
SELECT username as login FROM pg_shadow u WHERE usesysid = :idUser;这是故意的还是可能是这个问题? -
是的,这是故意的,如您所见:postgresql.org/docs/9.3/view-pg-shadow.html
-
哦。我知道了。那么,当方法被触发时,你得到的错误是什么?
-
@Etin : 看看我的新帖子...
标签: php postgresql forms rename alter