Неизвестный столбец «солнечный» в предложении where - PullRequest
0 голосов
/ 23 марта 2019
  <body>
    <%  String name=session.getAttribute("user").toString();    %>

 <br>

  <%@ page import="java.sql.*" %>
  <%
   try
  {
   Class.forName("com.mysql.jdbc.Driver").newInstance();
   java.sql.Connection 
   con=DriverManager.getConnection
   ("jdbc:mysql://localhost:3306/pbl","root","");
   Statement st=con.createStatement();
   String q="select pcode ,pname,pprice from car where us="+name;
   ResultSet rs = st.executeQuery(q) ;
 %>

ошибка: java.sql.SQLSyntaxErrorException: у вас есть ошибка в вашем SQL синтаксис; проверьте руководство, которое соответствует вашему серверу MariaDB версия для правильного синтаксиса для использования рядом «по имени» в строке 1

1 Ответ

4 голосов
/ 23 марта 2019

Я думаю, что проблема в этой строке String q = "выберите pcode, pname, pprice из машины, где us =" + name;

Да, потому что имя (по-видимому, солнечное) не в кавычках SQL, поэтому выглядит как ссылка на столбец.

НИКОГДА использовать конкатенацию строк для добавления значений в запросы SQL. Используйте подготовленные операторы вместо:

PreparedStatement ps = con.prepareStatement("select pcode ,pname,pprice from car where us = ?");
ps.setString(1, name);
ResultSet rs = ps.executeQuery();

Таким образом, информация обрабатывается как данные, а не как SQL (должным образом экранируется при необходимости и т. Д.). На что стоит обратить внимание:

  1. Вы используете ?, куда идут значения. Вы не ставите ? в кавычки или что-либо еще, даже если вы собираетесь использовать строку для значения.
  2. Вы получите подготовленное заявление, позвонив по номеру prepareStatement.
  3. Вы не передаете строку в executeQuery. (Это важно, потому что, к сожалению, вы можете передать строку в executeQuery на PreparedStatement, что обходит весь смысл использования подготовленных операторов; это должно было быть определено, чтобы вызвать исключение, но, к сожалению, это не так.)

Позвольте представить вам моего друга Бобби :

Her daughter is named Help I'm trapped in a driver's license factory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...