2015-06-01 2 views
1
session.getAttribute('loginId')//giving 1 

ResultSet rs=st.executeQuery("select * from interest where loginid='session.getAttribute('loginId')'"); 

илиMySQLSyntaxErrorException в запросе

ResultSet rs=st.executeQuery("select * from interest where loginid='session.getAttribute("loginId")'"); 

это дает мне исключение SQL.

что не так в моем запросе? в то время как -

ResultSet rs=st.executeQuery("select * from interest where loginid='1'"); 

бег хорошо.

Я не могу называть это, сохраняя loginId в String Object.

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'loginId')'' at line 1 

ответ

2

Pass в возвращаемом значении из getAttribute, а не буквального значения session.getAttribute('loginId')

PreparedStatement preparedStatement = 
      conn.prepareStatement("select * from interest where loginid=?"); 
preparedStatement.setString(1, session.getAttribute("loginId")); 
-1

Вы должны контактировать строки. Не inclusing параметра в одной строке:

изменение:

ResultSet rs=st.executeQuery("select * from interest where loginid='"+session.getAttribute("loginId")+"'"); 

Или лучше использовать подготовленные заявления. Это предотвращает использование SQL-запросов, и ваш запрос будет намного легче читать.

+0

это работает fine.I оценило. –

+0

Это введение SQL-инъекции и другие проблемы (например, сломанные запросы, если они содержат одну цитату). Никогда не объединяйте значения в SQL-запрос, всегда используйте параметризованные запросы. –

+0

@MarkRotteveel Почему downvote. Ответ правильный, и я указал на подготовленные заявления. Но я не хочу писать код подготовленного оператора для op. Он/она должен умерить его. – Jens

Смежные вопросы