Как вставить данные в базу данных MSSQL 2020 с использованием PHP и расширения SQLSRV?

Я разрабатываю сайт на HTML, использую локальный сервер Denwer, а также подключил расширения sqlsrv и pdo_sqlsrv, которые работают корректно. У меня установлена версия PHP 8.1.16 и MySQL 5.7.15 (хотя я использую MSSQL 20). При нажатии на кнопку форма обновляется, что, по моему мнению, говорит о том, что код выполняется. Чтобы упростить тестирование, я временно заменил данные на test1-3. В коде есть всего одна кнопка с name="signInButton" в форме. Подключение к базе данных работает, поскольку запрос на вывод данных успешно отображает информацию на странице. Однако запрос на добавление данных в таблицу не срабатывает. Также прикреплю фото с таблицей, где UserId имеет настройку IDENTITY(1,1). Если нужно больше информации, пишите, пожалуйста, подробнее, так как я новичок в этой области.
  • 18 апреля 2025 г. 16:45
Ответы на вопрос 2
Для вставки данных в базу данных MSSQL с использованием PHP и расширения SQLSRV, убедитесь, что вы правильно подготовили запрос на вставку и обработали данные, переданные из формы. Ниже приведен пример кода, который может помочь вам вставить данные в таблицу MSSQL. Предположим, что у вас есть таблица с названием `Users`, с такими столбцами, как `UserId` (IDENTITY), `Username` и `Password`.

### Пример кода вставки данных

```php
<?php
// Подключение к базе данных
$serverName = "localhost"; // Или ваш сервер MSSQL
$connectionOptions = [
    "Database" => "ИмяВашейБазыДанных",
    "Uid" => "ВашЛогин",
    "PWD" => "ВашПароль"
];

// Установить соединение
$conn = sqlsrv_connect($serverName, $connectionOptions);
if ($conn === false) {
    die(print_r(sqlsrv_errors(), true));
}

// Проверка, была ли отправлена форма
if (isset($_POST['signInButton'])) {
    // Подготовка данных
    $username = $_POST['username']; // Предположим, что в вашей форме есть поле с именем username
    $password = $_POST['password']; // И поле с именем password

    // Запрос на вставку данных
    $sql = "INSERT INTO Users (Username, Password) VALUES (?, ?)";
    $params = [$username, $password];

    // Выполнение запроса
    $stmt = sqlsrv_query($conn, $sql, $params);
    
    if ($stmt === false) {
        die(print_r(sqlsrv_errors(), true));
    } else {
        echo "Данные успешно добавлены!";
    }
}

// Закрытие соединения
sqlsrv_close($conn);
?>
```

### Что нужно сделать:
1. Убедитесь, что у вас уже есть форма, отправляющая данные. Пример простой формы:

```html
<form method="post">
    <input type="text" name="username" placeholder="Username" required>
    <input type="password" name="password" placeholder="Password" required>
    <button type="submit" name="signInButton">Войти</button>
</form>
```

2. Проверьте, правильно ли установлены параметры подключения к вашей базе данных. Если вы используете Windows аутентификацию, используйте `Trusted_Connection => true` вместо логина и пароля.

3. Убедитесь, что вы используете правильные имена полей в вашем SQL-запросе и что структура таблицы соответствует этим полям.

4. Проверьте наличие ошибок после выполнения запроса с помощью `sqlsrv_errors()`, это поможет вам диагностировать возможные проблемы.

5. После вставки данных рекомендуется делать обработку данных (например, хэширование паролей и т.д.) для повышения безопасности вашего приложения.

Если все сделано правильно и нет ошибок, данные должны успешно вставляться в таблицу MSSQL.
Чтобы скрипт перестал быть черным ящиком, полезно иногда пошарить в справке , где в очередном PDO интерфейсе пробивать ошибки операций работы с СУБД: 
// Выполняем запрос
    $stmt = sqlsrv_query($conn, $query, $params);
// То, чего никогда в учебниках не напишут - на любой чих в сторону СУБД - чекать ошибки и выводить их куда-нибудь:
if( $stmt === false ) {
    if( ($errors = sqlsrv_errors() ) != null) {
        foreach( $errors as $error ) {
            echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
            echo "code: ".$error[ 'code']."<br />";
            echo "message: ".$error[ 'message']."<br />";
        }
    }
}

    // Освобождаем ресурсы
    sqlsrv_free_stmt($stmt);
Похожие вопросы