SQLデータベースのエントリを検索しようとしていますが、検索バーに一重引用符を入力して実行するとエラーが発生します。特定の名前を入力すると、データベースから正しいエントリが返されます。私は ''を使用してエスケープし、準備されたステートメントを使用することについて読んだが、どちらの答えも私のケースに合っていないか、概念的に何かを理解していない。 (私は初心者です)事前に感謝! :)検索バーで一重引用符を使用する
以下は、私のjspファイルのコード、実行時の外観、そして一重引用符を挿入するとどうなりますか?
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>List of Entries</title>
</head>
<body>
<h1>Retrieve Data</h1>
<form method="post" action="index.jsp">
Search <input type="text" name="search"
placeholder="Enter your search here..." />
<input type="submit"
value="Search" name="submit"/>
</form><br><br>
<%
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
ResultSet rs2 = null;
try {
String searchReq = request.getParameter("search");
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//make connection to db
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/profile", "root", "");
//create a statement
stmt = con.createStatement();
//executes SQL query
rs = stmt.executeQuery("SELECT * FROM person WHERE Name LIKE '%"+ searchReq +"%'");
%>
<table border="1">
<tr>
<td><b>Name</b></td>
<td><b>Birthday</b></td>
<td><b>Address</b></td>
<td><b>Gender</b></td>
<td><b>School</b></td>
</tr>
<%
try {
while (rs.next()) {
%>
<tr>
<td><%=rs.getString("Name")%></td>
<td><%=rs.getString("Birthday")%></td>
<td><%=rs.getString("Address")%></td>
<td><%=rs.getString("Gender")%></td>
<td><%=rs.getString("School")%></td>
</tr>
<%
}
} catch (Exception e) {
e.printStackTrace();
}
%>
</table>
<%
}
catch (Exception e) {
e.printStackTrace();
}
finally {
rs.close();
stmt.close();
con.close();
}
%>
</body>
</html>
がこれを読んでhttp://stackoverflow.com/a/37479030/1997376 –
文字列を厳しくしないで、パラメータを使用します。また、どのSQLを使用していますか? (SQL-Server、MySQL、Oracle) – Chuck
@チャックMYSQL。申し訳ありませんが、あなたは文字列がよりタイトであることを意味しますか? – episkeyyy