Задать вопрос
@Hekys

Как добавить данные в бд mssql 20 с помощью php sqlsrv?

Делаю сайт на html на локальном сервере denwer, подключил расширения sqlsrv и pdo_sqlsrv, сервер всё распознает и работает. Версия php 8.1.16, версия mysql 5.7.15(не знаю, нужно ли это или нет, ведь использую mssql 20). Вроде как всё должно добавляться, при нажатии на кнопку страница обновляется(я думаю это знак того, что выполняется код с добавлением данных). Я пока данные заменил на test1-3, чтобы было удобнее, так что код html не нужен. Там просто одна кнопка с name="signInButton" в форме. БД подключается, я пробовал запрос на вывод данных на страницу - всё работает. Но вот запрос с добавляет данных в таблицу - нет. Так же прикреплю фото с таблицей(UserId имеет IDENTITY(1,1)). Если ещё что-то надо будет - напишите, только, пожалуйста, подробно, а то я новичок в этой теме. 68027f63e26a2589166758.png
<?php
$serverName = ".\\SQLEXPRESS01";
$connectionOptions = [
    "Database" => "ClothesShop",
    "UID" => "",
    "PWD" => "",
    "TrustServerCertificate" => true,
];

// Устанавливаем подключение
$conn = sqlsrv_connect($serverName, $connectionOptions);

$email = "tes1t";
$password = "test2";
$keepSignIn = "test3";

if (isset($_POST['signInButton'])) {
    createAccount($conn, $email, $password, $keepSignIn);
}

function createAccount($conn, $email, $password, $keepSignIn) {
    // Подготовленный запрос с параметрами
    $query = "INSERT INTO Accounts (UserLogin, UserPassword, KeepSignIn) VALUES (?, ?, ?)";
    $params = array($email, $password, $keepSignIn); // Параметры для вставки

    // Выполняем запрос
    $stmt = sqlsrv_query($conn, $query, $params);

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

// Закрываем соединение
sqlsrv_close($conn);
?>
  • Вопрос задан
  • 118 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Самое главное, чему надо научиться - это правильно формулировать свои проблемы.
Судя по приведённому коду, вы прекрасно знаете, как добавлять данные. Но почему-то всё равно спрашиваете, как это сделать. "Где логика, где разум?"
Судя по тексту вопроса, проблема ваша формулируется совсем по-другому: не "как добавить", а "почему не добавляется". Это два совершенно разных вопроса.

А чтобы ответить на вопрос, почему код не работает, надо заниматься отладкой. Это отдельная дисциплина в программировании, которую надо освоить. Чтобы найти ошибку в своём коде, надо выполнить три вещи

1. Убедиться, что в РНР включён вывод ошибок. Проверить можно тупо допустив ошибку синтаксиса. Если она выведется - очень хорошо, значит вы видите ошибки. Если нет, то включить, хотя бы через ini_set.
1.2. Для древних, как гуано мамонта расширений, таких как sqsrv, надо проверять ошибки запросов вручную. Но делать это надо с умом, а не как в соседнем ответе. Ошибку SQL надо не тупо вываливать на экран вручную, а превратить в ошибку РНР, чтобы она выводилась так же и туда же, куда и остальные ошибки. Это можно сделать простым кодом вида
if( $stmt === false ) {
    throw new Exception(print_r( sqlsrv_errors(), true));
}

2. Упростить свой код. Всегда проверять что-то одно. Вы что хотите проверить? Выполнение запроса на вставку? А зачем вам тогда форма вообще? Сделайте скрипт, который при обращении к нему просто записывает данные в БД, без всяких форм и прочего.
Работает? Очень хорошо, переходите к формам. И если что-то не будет работать, то и вопрос будет совсем другой, "у меня не работает форма", который к "как сделать запрос" уже совсем никакого отношения не имеет.
Не работает? Разбирайтесь с запросом, без всяких форм. Если вы проверяете что-то одно, то у вас и не работает что-то одно. А не десять разных потенциальных точек отказа.
3. Контролировать ход выполнения своего кода.
Например, вот вы разобрались с запросом, и перешли к обработке формы. И вот у вас есть условие, if (isset($_POST['signInButton'])). А вы проверили, оно хоть выполнилось? Если нет, то в базу никогда ничего не добавится, хоть обперегружайся. Поэтому добавляете временный вывод отладочной информации:
echo "проверяем нажатие кнопки\n";
if (isset($_POST['signInButton'])) {
    echo "проверка прошла успешно\n";
    createAccount($conn, $email, $password, $keepSignIn);
}

Если "проверка прошла успешно" не вывелось - значит никакого $_POST['signInButton']) в вашем скрипте нет, и надо разбираться - почему. Например, в форме не указан метод, или кнопка называется совсем по-другому. Чтобы разобраться с этим, надо
3.1 Выводить содержимое используемых переменных. Делаете
var_dump($_POST);
после отправки формы, и смотрите. Если там совсем пусто, значит никакую форму методом POST вы не отправляли. Если там что-то есть - то смотрите, что именно, и насколько это соответствует вашим ожиданиям.

Вот и всё. Эта нехитрая инструкция позволяет быстро решить любые проблемы с кодом. Главное потом не забыть удалить все отладочные сообщения. или научиться пользоваться пошаговой отладкой в IDE
Ответ написан
@alexalexes
Чтобы скрипт перестал быть черным ящиком, полезно иногда пошарить в справке, где в очередном 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);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы