Я пытаюсь заставить PHP вставлять данные POST из моей html-формы в мой SQL Server 2018 на локальном компьютере. Я просмотрел документацию по php и следую ей, но до сих пор не понимаю, почему код выдает ошибку. Имя таблицы, в которую я вставляю данные, называется «ПОЛЬЗОВАТЕЛЬ». Может ли кто-нибудь посмотреть на мой код и сказать мне, что не так?
Я просмотрел различные источники, включая PHP.net и переполнение стека для решения, но не помогает мне решить мою проблему.
PHP-скрипт:
if (isset($_POST['create_acc'])) {
$username = strip_tags(trim($_POST["username"]));
$password = strip_tags(trim($_POST["password"]));
$role = strip_tags(trim($_POST["role"]));
$pwdhash = password_hash($password, PASSWORD_ARGON2I);
$sql = "INSERT INTO USER (user_id, password, role) VALUES (?, ?, ?)";
$params = array($username, $pwdhash, $role);
$stmt = sqlsrv_query( $conn, $sql, $params);
if ($stmt){
$msg = "Account created successfully!";
}else{
die(print_r(sqlsrv_errors(), true));
}
}
Результат:
Array (
[0] => Array (
[0] => 42000
[SQLSTATE] => 42000
[1] => 156
[code] => 156
[2] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near the keyword 'USER'.
[message] => [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near the keyword 'USER'.
)
)
Действительно ли user_id является именем пользователя?






Я только что узнал через 1 минуту после публикации вопросов. «Пользователь» — это зарезервированное ключевое слово в SQL Server. Как только я изменил имя таблицы на USERNAME, все заработало!
Если вы используете зарезервированное ключевое слово в SQL Server (которое вы можете проверить здесь). Вы должны использовать идентификаторы с разделителями.
Это должно работать:
$sql = "INSERT INTO [USER] (user_id, password, role) VALUES (?, ?, ?)";
USER— это зарезервированное слово в SQL Server, не знаю, как его нужно экранировать (или, наоборот, переименовать).