带有用户输入的 SQL 查询
Posted
技术标签:
【中文标题】带有用户输入的 SQL 查询【英文标题】:SQL query with user input 【发布时间】:2016-08-13 03:39:23 【问题描述】:我有一个错误
java.sql.SQLException: ORA-00933: SQL 命令未正确结束
当我尝试执行以下 SQL 语句时。
在此语句中,它应该在搜索客户名称时显示特定客户的所有租赁详细信息和反馈。 “查询”是指用户在数据库中搜索姓名(CustomerName)时的用户输入。
SELECT c.CustomerName, r.Rental_ID, r.Staff_ID, r.RentalDate, r.DueDate,
r.Customer_ID, f.Description
FROM Rental r, Customer c, FeedBack f
WHERE f.Customer_ID = r.Customer_ID
AND c.Customer_ID = f.Customer_ID
ORDER BY DueDate
WHERE CustomerName like "+ query +";
出了什么问题?
【问题讨论】:
我希望您不要直接将用户提供的名称附加到您的查询中,而是使用PreparedStatements
以避免明显的 sql 注入漏洞。
@E.Wong 你的 ORDER BY 应该在 where 子句更改这些地方并检查之后。
嗯,是的,我已经准备好了声明,只是没有包含在我的问题中。哈哈。 xD 啊,我明白了,会这样做并尝试一下。谢谢。 :)
【参考方案1】:
因为你在错误的地方有 WHERE
和 ORDER BY
子句;不仅您的查询中实际上有两个 WHERE
子句。应该只有一个。 WHERE
应该先出现,然后是 order by
。应该是
WHERE CustomerName like "+ query +"
ORDER BY DueDate;
也作为旁注,
-
考虑使用参数化查询
修改您的查询以使用 ANSI 标准
JOIN
语法而不是旧式语法。
您的查询应如下所示
SELECT c.CustomerName, r.Rental_ID,
r.Staff_ID, r.RentalDate,
r.DueDate, r.Customer_ID, f.Description
FROM Rental r
JOIN FeedBack f ON f.Customer_ID = r.Customer_ID
JOIN Customer c ON c.Customer_ID = f.Customer_ID
WHERE c.CustomerName like "+ query +"
ORDER BY r.DueDate;
【讨论】:
啊,我明白了。我的导师教我旧式语法,所以我使用它,但感谢您的解释。 :)以上是关于带有用户输入的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何在带有 php 用户输入的 SQL 中使用 like 运算符? [复制]