if (isset($_GET['ResetPassword'])) {
$name = $_GET['name'];
$sql = "ALTER LOGIN $name WITH PASSWORD=N'Nico1234!'";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':name', $_GET['name'], PDO::PARAM_STR);
$stmt->execute();
}
大家好,我无法更改某个名称(用户)的密码,该名称来自get(从sql中选择)。 感谢您的帮助。
答案 0 :(得分:1)
ALTER TABLE语句用于更改表的模式,例如添加列或FOREIGN KEYS。 您是否要制作UPDATE语句?正确的查询是:
"UPDATE Login SET PASSWORD='Nico1234!' WHERE name=:name"
如果要将$_GET['name']
参数添加到语句中,则必须在其中的任何位置使用:name
。
答案 1 :(得分:0)
如果要更改SQL Server登录帐户的属性,请使用ALTER LOGIN。 这里的问题将是您语句中的参数。 表名和列名不能用PDO中的参数替换。我不确定,但是我认为登录名是相同的。 因此,在这种情况下,您应该使用不带参数的语句,转义特殊字符并手动清理数据。
请注意,当您要使用参数时,占位符的正确语法是:name
或?
,而不是$name
。
<?php
...
try {
# SQL Authentication
$conn = new PDO("sqlsrv:server=$server;Database=$database", $uid, $pwd);
# Windows Authentication
#$conn = new PDO("sqlsrv:server=$server;Database=$database");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch( PDOException $e ) {
die( "Error connecting to SQL Server".$e->getMessage());
}
...
try {
$name = $_GET['name'];
$password = 'Nico1234!';
# Escape special characters and do some check for $name and $password values
$stmt = $conn->prepare("ALTER LOGIN $name WITH PASSWORD = N'$password'");
$stmt->execute();
} catch( PDOException $e ) {
die("Error executing query: ".$e->getMessage() );
}
...
?>
ALTER LOGIN
需要权限才能正确执行。如果使用Windows身份验证,则使用Web服务器的进程标识或线程标识(如果Web服务器正在使用模拟)来连接到SQL Server。使用下一个脚本获取更多信息(在SQL和Window身份验证之间进行更改):
<?php
# Connection
$server = 'server\instance,port';
$database = 'database';
$uid = 'uid';
$pwd = 'pwd';
# PDO Connection
try {
# SQL authentication
#$conn = new PDO("sqlsrv:server=$server;Database=$database", $uid, $pwd);
# Windows authentication
$conn = new PDO("sqlsrv:server=$server;Database=$database");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch( PDOException $e ) {
die( "Error connecting to SQL Server".$e->getMessage());
}
#
try {
$stmt = $conn->query("SELECT 'SUSER_SNAME' AS [NAME], CONVERT(nvarchar(128), SUSER_SNAME()) AS [VALUE]");
# Data
while ($row = $stmt->fetch(PDO::FETCH_ASSOC) ){
echo $row['NAME'].": ".$row['VALUE']."</br>";
}
} catch( PDOException $e ) {
die( "Error executing query".$e->getMessage() );
}
#
$stmt = null;
$conn = null;
?>