Ошибка возникает при вводе текстового поля с более чем одним символом.Сообщение об ошибке «String или двоичные данные будут усечены» будет означать, что вы создали таблицу, текстовые столбцы которой ограничены одним символом.Это произошло бы, если бы в вашем CREATE
заявлении говорилось, что они CHAR
, а не CHAR(somenumber)
или NVARCHAR(somenumber)
.
Однако у вас есть более серьезная проблема:
$tsql = "insert into Suggestions (Who, What, Votes) values ('$who','$what','10')";
Вы забыли SQL-экранировать эти текстовые строки.Если они содержат символ '
, ваш запрос прерывается, и любой злоумышленник может выполнить произвольный SQL, введя его в запрос.Довольно скоро ваша база данных будет повреждена ссылками на вредоносные программы или, что еще хуже.
Как ни странно, драйверы sqlsrv
, похоже, не дают вам надлежащей функции экранирования, а просто заменяют '
на ''
должно быть достаточно для SQL Server.Однако вам лучше избегать этой проблемы, используя параметризованные запросы :
sqlsrv_query(
$conn,
'INSERT INTO Suggestions (Who, What, Votes) VALUES (?, ?, 10)',
array($who, $what)
);