Если вы хотите изменить свойства учетной записи входа на 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, то для подключения к SQL Server используется идентификатор процесса или идентификатор потока веб-сервера (если веб-сервер использует олицетворение). Используйте следующий сценарий для получения дополнительной информации (изменение между проверкой подлинности SQL и Windows):
<?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;
?>