Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   не выполняется сортировка (https://javascript.ru/forum/node-js-io-js/81008-ne-vypolnyaetsya-sortirovka.html)

riaron 13.09.2020 12:24

не выполняется сортировка
 
Не выполняется сортировка
вот код
app.get('/smart/:sort', function(req, res) {
	var smartphopneList = [];
	var sort;
	var inp=[];
	// Connect to MySQL database.
	var connection = getMySQLConnection();
	connection.connect();
	if(!req.params.sort){
		sort='id';
	}else{
		sort=req.params.sort;
	}
inp.push(sort);
	// Do the query to get data.
	connection.query('SELECT `id`,`prod`,`name`,`description`,`photo`,`price` FROM `smartphone` ORDER BY ?', inp, function(err, rows, fields)

laimas 14.09.2020 07:04

И ошибок при этом не возвращается?

Сама MySQL не оперирует не именованными параметрами (?), этим занимается расширение. Я не знаю Node, как в нем это все работает и есть ли вообще такое, но обычно эти параметры нужно связать с данными запроса. Для не именованных параметров обязательное условие, это равенство количества не именованных параметров и данных запроса, а порядок следования данных должен соответствовать порядку их описания не именованными параметрами в запросе. При связывании описывается и тип данных, для каждого значения. Подставляемые в запрос не именованные параметры обрабатываются во время подготовления запроса, в котором затем будут сопоставлены переданные значения.

Во время выполнения подготовленного запроса значения определенные как string будут экранированы, а значения определенные как integer, double и blob будут приведены к этим типам. Это исключает sql-инъекцию во время запроса.

Но исключение инъекции не решает проблемы соответствия данных типам полей, то есть не будет возникать ошибок если данные не соответствуют, запрос успешно выполнится, а в базе будет "мусор". Для предотвращения этого данные пришедшие извне нужно подвергать фильтрации если недопустимы несоответствия, иначе в дальнейшем эти данные могут порождать ошибки или иные проблемы.

По крайней мере в данном запросе есть попытка обезопасить запрос в отличие от запроса в этой теме. Там что пришло, то отправили в запрос, по крайней мере не наблюдается ни экранирования, ни приведения типов, вообще ничего. Учтите, что если "прокатило", характер запроса не позволил выполнить имеющуюся в данных инъекцию, то это не означает, что она не сработает впоследствии. Запросы к базе могут использовать данные в ней как параметры запроса, и молчащие до поры до времени "грабли" в ней обязательно когда-то выстрелят.

riaron 14.09.2020 09:47

https://metanit.com/web/nodejs/8.2.php

laimas 14.09.2020 10:30

Ну о чем гласит документация?

const user = ["Tom", 29];

и в запросе

'.... VALUES(?, ?)'

То есть в вашем случае это должно быть

const user = [x];

где x, это принятое значение для сортировки, обрабатываются ли при этом типы и только ли так связываются данные с параметрами, бог его знает.

и в запросе

'.... ORDER BY ?'

Vlasenko Fedor 14.09.2020 11:09

перепишите код с использованием switch case
манипулируя ORDER BY id ...
orm подставляют значения полей, но не названия полей обычно


Часовой пояс GMT +3, время: 14:38.