У меня проблемы с передачей переменной в ORDER BY в запросе MSSQL (через PHP), здесь код:
<?php
include "connection.php";
$type = $_POST['type'];
$order = $_POST['order'];
$data = $_POST['data'];
$params="@order varchar(10)";
$paramslist="@order=$order";
$sql = "SELECT * FROM Customer ORDER BY "+@order;
$dbsql = "EXEC sp_executesql
N'$sql',
N'$params',
$paramslist";
$result = sqlsrv_query($link, $dbsql);
if ($result) {
echo "OK";
} else {
echo "FAIL - " . $order . " -- ";
die(print_r(sqlsrv_errors(), true));
}
?>
В браузере отображается следующая ошибка:
FAIL - CompanyName - Массив
(
[0] => Массив
(
[0] => 42000
[SQLSTATE] => 42000
[1] => 102
[code] => 102
[2] => [Microsoft] [Собственный клиент SQL Server 10.0] [SQL Server] Неверный синтаксис рядом с «0».
[message] => [Microsoft] [Собственный клиент SQL Server 10.0] [SQL Server] Неверный синтаксис рядом с «0».
)
)
Проверок на данный момент:
- Все переменные POST имеют необходимые данные
- правильное имя таблицы SQL и данные в $ order равны правильному имени столбца
Я искал вокруг, но не могу найти ничего слишком полезного, кто-нибудь может помочь?
Спасибо.
EDIT:
Хорошо, теперь код:
$params="@order varchar(10)";
$paramslist="@order=$order";
$sql = "SELECT * FROM Customer ORDER BY ".$order;
$dbsql = "EXEC sp_executesql
N'$sql',
N'$params',
$paramslist";
$result = sqlsrv_query($link, $dbsql);
И это работает нормально, но оставляет ли это его открытым для атак с использованием SQL-инъекций? Есть ли лучший способ выполнить этот запрос?
Любая помощь приветствуется.