Невозможно изменить SQL с помощью оператора PDO - PullRequest
0 голосов
/ 09 января 2019
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();
} 

Привет, ребята. Я не могу изменить пароль определенного имени (пользователя) Откуда получено имя (выбрано из sql). Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Если вы хотите изменить свойства учетной записи входа на 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;
?>
0 голосов
/ 09 января 2019

ALTER TABLE Операторы используются для изменения схемы таблицы, например, добавления столбца или клавиш FOREIGN. Вы пытаетесь сделать заявление ОБНОВЛЕНИЕ? Правильный запрос будет:

"UPDATE Login SET PASSWORD='Nico1234!' WHERE name=:name"

Если вы хотите добавить параметр $_GET['name'] в оператор, вы должны использовать :name в любом месте внутри него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...