如何用CF与查询实现数据库名称重复校验并提示(不使用JS/JQuery)
实现步骤及修改代码
要实现仅通过ColdFusion和数据库检查名称是否存在的需求,你需要在执行插入操作之前先查询数据库验证名称是否已存在,具体逻辑和代码修改如下:
核心逻辑
- 表单提交时,优先查询数据库中是否已有输入的名称
- 如果名称已存在,直接输出错误提示
- 如果名称不存在,再执行插入操作
- 必须用
<cfqueryparam>替代直接拼接变量的写法,防止SQL注入(初学者容易忽略这一关键安全点)
修改后的完整代码
<cfif isDefined("Button")> <!--- 第一步:查询数据库,检查名称是否已存在 ---> <cfquery name="checkNameExists" datasource="mysql"> SELECT Name FROM tbl_products_manager WHERE Name = <cfqueryparam value="#name#" cfsqltype="cf_sql_varchar"> </cfquery> <cfif checkNameExists.recordCount GT 0> <!--- 名称已存在,显示错误提示 ---> <p>This name already exists</p> <cfelse> <!--- 名称不存在,执行插入操作 ---> <cfquery name="insertProduct" datasource="mysql"> INSERT INTO tbl_products_manager (Name) VALUES (<cfqueryparam value="#name#" cfsqltype="cf_sql_varchar">) </cfquery> <!--- 插入成功后加载指定页面 ---> <cfinclude template="pr.cfm"> </cfif> </cfif>
关键说明
<cfqueryparam>:替换原代码中直接使用#name#的写法,既可以避免SQL注入攻击,也能保证数据类型与数据库字段匹配(这里假设Name是字符串类型,所以用cf_sql_varchar)checkNameExists.recordCount:通过查询结果的记录数判断是否存在同名数据,记录数大于0则说明名称已存在- 逻辑顺序:必须先检查再执行插入,不能颠倒顺序
内容的提问来源于stack exchange,提问作者user19793229
相关产品推荐
相关产品推荐

