Мне было интересно, если бы все-таки было указано имя возвращаемого столбца, используя подготовленные операторы.Переменные имена столбцов с использованием подготовленных операторов
Я использую MySQL и Java.
Когда я попробовать:
String columnNames="d,e,f"; //Actually from the user...
String name = "some_table"; //From user...
String query = "SELECT a,b,c,? FROM " + name + " WHERE d=?";//...
stmt = conn.prepareStatement(query);
stmt.setString(1, columnNames);
stmt.setString(2, "x");
я получаю этот тип заявления (печать непосредственно перед выполнением).
SELECT a,b,c,'d,e,f' FROM some_table WHERE d='x'
Я хотел бы видеть, однако:
SELECT a,b,c,d,e,f FROM some_table WHERE d='x'
Я знаю, что я не могу сделать это для имен таблиц, как описано here, но было интересно, есть ли какой-то способ сделать это для столбца имена.
Если этого не произошло, тогда мне просто нужно попробовать и убедиться, что я дезинфицирую вход, поэтому он не приводит к уязвимости SQL-инъекций.
Ну, пользователю действительно не нужно знать имена столбцов, но требуемые имена столбцов выводятся на основе форм, представленных пользователем. Это обрабатывается на стороне клиента, хотя, поэтому я хотел посмотреть, есть ли способ обеспечить безопасность данных. Должен ли я просто переместить всю партию на серверную сторону, тем самым, чтобы данные столбца не были заполнены? – KLee1
Вместо этого обрабатывайте его на стороне сервера. Не делайте деловые дела на стороне клиента. – BalusC
@BalusC: _ "вы не можете установить имена столбцов в качестве значений PreparedStatement" _ - это полностью составлено. Разумеется, использование имен столбцов внутри готовых таблиц значений инструкций возможно, но это не значит, что его следует использовать таким образом, он все еще плохой дизайн. – specializt