<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 行“by name”附近使用正确语法的版本
最佳答案
i guess the problem in this line String q="select pcode,pname,pprice from car where us="+name;
是的,因为名称(显然是sunny)不在 SQL 引号中,所以它看起来像一个列引用。
决不使用字符串连接将值添加到 SQL 查询中。使用prepared statements相反:
PreparedStatement ps = con.prepareStatement("select pcode ,pname,pprice from car where us = ?");
ps.setString(1, name);
ResultSet rs = ps.executeQuery();
这样,信息将作为数据处理,而不是作为 SQL(必要时适当转义等)。需要注意的事项:
- 您在值所在的位置使用
?
。即使您要使用字符串作为值,您也不会将?
放在引号或其他内容中。 - 您可以通过在连接上调用
prepareStatement
来获取准备好的语句。 - 您没有将字符串传递给
executeQuery
。 (这很重要,因为遗憾的是,您可以将字符串传递到PreparedStatement
上的executeQuery
中,这绕过了使用准备好的语句的全部意义;它应该被定义为引发异常,但遗憾的是事实并非如此。)
让我向您介绍my friend Bobby :
关于java - where 子句中的未知列 'sunny',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55312918/