aayush2158 Ответов: 1

Обновление первичного ключа в jsp


я создал таблицу, которая является первичным ключом на id(coloum), и я хочу обновить ее
с запросом он показывает мне

Parameter index out of range (1 > number of parameters, which is 0).



<%

				int status = 0;
				String id = request.getParameter("id");
				int id2 =Integer.parseInt(id);
				
				String productquantity2 = request.getParameter("productquantity");
				String productsize = request.getParameter("productsize");
				String imageurl = request.getParameter("imageurl");
				String productname = request.getParameter("productname");
				String productcode = request.getParameter("productcode");
			
				
				
				//out.println("id"+id);
				//out.println("productquantity"+productquantity2);
				//out.println("productsize"+productsize);
						 //out.println(query);
				 String query = "update cart" + name + " set productname="+productname+" ,productquantity=" + productquantity2 + " ,productsize = "+ productsize + " ,productcode = "+productcode+",imageurl="+imageurl+" where id=" + id2;
		
				

				try {
					Connection con = UserConnection.Connector();
					PreparedStatement ps = con.prepareStatement(query);
					ps.setString(1, productname);
					ps.setString(2, productquantity2);
					ps.setString(3, productsize);
					ps.setString(4, productcode);
					ps.setString(5, imageurl);
					ps.setInt(6, id2);
					ps.executeUpdate();
		
					out.println("updated");
					/* if (status > 0) {
						response.sendRedirect("../Jsp/Product.jsp");
						out.println("updated");
						System.out.println(status);
					}else{
						out.println(" not updated");
					} */

				} catch (Exception ex) {
					System.out.println(ex);
				} 
%>


Что я уже пробовал:

я уже пробовал это сделать и не знаю что делать

1 Ответов

Рейтинг:
8

Richard Deeming

Цитата:
String query = "update cart" + name + " set productname="+productname+" ,productquantity=" + productquantity2 + " ,productsize = "+ productsize + " ,productcode = "+productcode+",imageurl="+imageurl+" where id=" + id2;

Это не то, как работают параметры. Ваш код вводит значения непосредственно в запрос, что делает вас уязвимым для SQL-инъекции.

Когда вы передадите этот запрос в PreparedStatement, он видит, что в запросе нет заполнителей параметров. Когда вы затем пытаетесь установить значение первого параметра, вы получаете исключение, потому что нет никаких параметров.

Обновите запрос, чтобы использовать правильные заполнители параметров:
String query = "update cart set productname = ?, productquantity = ?, productsize = ?, productcode = ?, imageurl = ? where id = ?";

Это исправит вашу ошибку и уязвимость SQL-инъекции в вашем коде.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]