не выполняется сортировка
Не выполняется сортировка
вот код 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) |
И ошибок при этом не возвращается?
Сама MySQL не оперирует не именованными параметрами (?), этим занимается расширение. Я не знаю Node, как в нем это все работает и есть ли вообще такое, но обычно эти параметры нужно связать с данными запроса. Для не именованных параметров обязательное условие, это равенство количества не именованных параметров и данных запроса, а порядок следования данных должен соответствовать порядку их описания не именованными параметрами в запросе. При связывании описывается и тип данных, для каждого значения. Подставляемые в запрос не именованные параметры обрабатываются во время подготовления запроса, в котором затем будут сопоставлены переданные значения. Во время выполнения подготовленного запроса значения определенные как string будут экранированы, а значения определенные как integer, double и blob будут приведены к этим типам. Это исключает sql-инъекцию во время запроса. Но исключение инъекции не решает проблемы соответствия данных типам полей, то есть не будет возникать ошибок если данные не соответствуют, запрос успешно выполнится, а в базе будет "мусор". Для предотвращения этого данные пришедшие извне нужно подвергать фильтрации если недопустимы несоответствия, иначе в дальнейшем эти данные могут порождать ошибки или иные проблемы. По крайней мере в данном запросе есть попытка обезопасить запрос в отличие от запроса в этой теме. Там что пришло, то отправили в запрос, по крайней мере не наблюдается ни экранирования, ни приведения типов, вообще ничего. Учтите, что если "прокатило", характер запроса не позволил выполнить имеющуюся в данных инъекцию, то это не означает, что она не сработает впоследствии. Запросы к базе могут использовать данные в ней как параметры запроса, и молчащие до поры до времени "грабли" в ней обязательно когда-то выстрелят. |
|
Ну о чем гласит документация?
const user = ["Tom", 29]; и в запросе '.... VALUES(?, ?)' То есть в вашем случае это должно быть const user = [x]; где x, это принятое значение для сортировки, обрабатываются ли при этом типы и только ли так связываются данные с параметрами, бог его знает. и в запросе '.... ORDER BY ?' |
перепишите код с использованием switch case
манипулируя ORDER BY id ... orm подставляют значения полей, но не названия полей обычно |
Часовой пояс GMT +3, время: 07:52. |